Stringはクラスなのに、なぜインスタンス化するときnewしないのか
技術めもこっちに書く。。
Stringはクラスなのに、なぜインスタンス化するときnewしないのか。
【Java】 そもそもStringって何? | 一番かんたんなJava入門
・「オブジェクトとして処理される」というのは、中身ではどう処理されているのか?
JVM はString定数プールという特別なメモリ領域に保持される。
newを使うと普通のオブジェクトが普通のメモリ領域に生成され、加えて、new String("あいうえお")のカッコ内の"あいうえお"がString定数プールにも保持される。
・String定数プールのメリット
コンパイラは、Stringリテラルを見つけると同じStringがないかプールをチェックする(同じchar値と長さでチェック)。
あれば新しいStringリテラルは作成せずに既存の参照先と結びつける。
⇒ これがStringが不変である理由。ソース上で複数の同じ文字列が同じ参照をしているとき、いずれかの参照を変更してしまうと他も変わってしまうから。