(新人エンジニアのふぎと君。
今日はJavaのコードをせっせと書いているみたい)
Stringクラスのインスタンス
「…と、ほなそろそろStringクラスで文字列作るか」
String string1 = "Hello";
String string2 = new String("Hello");
「遊び心を加えて書き方変えてみたで」
「これは先輩もくすっと笑ってくれるやろ!」
先輩のもとへ
「先輩、コード書いたんで見てください」
「おもろいですやろ」
「んー、どれどれ・・・?」
「おん?」
「なあふぎと、お前この違いわかってへんのと違うか?」
「・・・?どの違いですか?」
「Stringクラスの初期化の仕方の違いや」
「違いって・・・どっちもStringクラスのインスタンスを
つくってるんと違うんですか」
「そうとも言えるし、そうやないとも言える」
「1つはリテラルで、もう1つはインスタンスや」
String string1 = "Hello"; //リテラル
String string2 = new String("Hello"); //インスタンス
「ええっ」
「そうなんですか」
先輩ガチレク発動
「newしてつくった文字列はな」
「メモリのヒープ領域におかれんねん」
「ヒープ領域…?(;^ω^)」
「ざっくり言うたら『材料の保管庫』って感じや」
「プログラムの実行に必要なデータを置いとくとこやな」
「あーなるほど」
「話もどすけどな」
「newして作った文字列はヒープ領域におかれるんに対して」
「代入演算子で作った文字列はヒープにおかれた後」
「その参照が文字列リテラルプールに登録される」
「モジレツリテラルプール?」
「せや」
「ここに登録されたんと同じ文字列が次に作られたとき、」
「プログラムは文字列リテラルプールに登録された文字列の
参照を返して、新しいインスタンスはつくらへん」
「なんとなくわかってきましたわ」
「同じ文字列やったら同じインスタンスを使いまわすってことですね?」
「まあ、ざくっと言うたらそうや」
「そもそもインスタンスの作成はコンピュータにとって
しんどい仕事やねん」
「せやから、よく使うStringクラスはそのしんどい仕事を
なるべくせえへんようにできるようになっとる訳やな」
「ほへー」
「勉強なりました」
「ありがとうございました(*´ω`)」
参考
https://it-trend.jp/development_tools/article/32-0041
川場隆『Javaオブジェクト指向徹底解説』(秀和システム)