読者です 読者をやめる 読者になる 読者になる

文系seの備忘録

Excelの改行でひたすらスペースを打っていた機械音痴の文系seが日々の備忘録を綴る。

Stringはクラスなのに、なぜインスタンス化するときnewしないのか

技術めもこっちに書く。。



Stringはクラスなのに、なぜインスタンス化するときnewしないのか。


【Java】 そもそもStringって何? | 一番かんたんなJava入門



・「オブジェクトとして処理される」というのは、中身ではどう処理されているのか?

JVM はString定数プールという特別なメモリ領域に保持される。
newを使うと普通のオブジェクトが普通のメモリ領域に生成され、加えて、new String("あいうえお")のカッコ内の"あいうえお"がString定数プールにも保持される。



・String定数プールのメリット
コンパイラは、Stringリテラルを見つけると同じStringがないかプールをチェックする(同じchar値と長さでチェック)。
あれば新しいStringリテラルは作成せずに既存の参照先と結びつける。

⇒ これがStringが不変である理由。ソース上で複数の同じ文字列が同じ参照をしているとき、いずれかの参照を変更してしまうと他も変わってしまうから。