この記事では、String が不変である理由を紹介します。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。
Maoyan へのインタビューで、インタビュアーは、String 文字列が変更されない理由を尋ねました。そのときの私の答えは、String クラスが Final キーワードで変更されているからでしたが、なぜ Final で変更すると不変になるのかと問われると、自分の言っていることが意味をなさないことがわかりました。では、その理由を具体的に調べてみました。
String の不変性は、以下の図に示すように、s を変更すると、s は新しいオブジェクトを指し、元のオブジェクトは変更されません。
ソース コードがどのように実装されているかを見てください:
String が Final として定義されていることがわかります。次に、String の内部実装が char 配列であり、final として定義されていることがわかります。このとき、最終変更フィールドは一度作成したら変更できないので終わったと思う人もいるかもしれませんが、そうではありません。
value は不変ですが、value の参照アドレスだけが不変だからです。ただし、それが参照する Array 配列は変更可能です。
final int[] value={1,2,3}; value[2]=100; //这时候数组里已经是{1,2,100}
つまり、基本的に String が不変である理由は、Sun のエンジニアが値の配列を非常にうまくカプセル化しているためです。彼らはすべてのメソッドで値の配列を変更せず、値の配列をプライベートとして定義し、文字列全体をそれを設定します他の人が相続して破壊されることを避けるために、相続を禁止する最終的なもの。したがって、String の不変性の鍵は、final の役割ではありません。
同時に、文字列の不変性によって大量のスペースが占有されることを避けるために、Java 作成者は文字列定数プールを設計しました
String one = "someString"; String two = "someString";
この記事はここです ここですべてが終わります。その他のエキサイティングなコンテンツについては、PHP 中国語 Web サイトの Java ビデオ チュートリアル 列に注目してください。
以上がString が不変である理由の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。