概念を理解する
一般に信じられていることに反して、提供されたコード スニペットは文字列が変更可能であることを示していません。 Java の文字列は不変です。つまり、その内容は変更できません。では、変数 'a' はどのようにして値を "a" から "ty" に変更したのでしょうか?
参照の再割り当て
実際には、参照変数 'a'は、別の値を持つ新しい String オブジェクトに再割り当てされます。値「a」を持つ元のオブジェクトは変更されません。
文字列の変更方法
サフィックスの追加など、文字列オブジェクトが「変更」されたと考えられる場合「concat」メソッドを使用すると、変更された値を使用して新しい String オブジェクトが実際に作成されます。この新しいオブジェクトは、元のオブジェクトを置き換えて、同じ参照変数に割り当てられます。
文字列定数プールの役割
メモリ使用量を最適化するために、Java 仮想マシンは(JVM) は、文字列定数プールと呼ばれる特別な領域を使用します。このプールには、リテラルまたは「new」キーワードを通じて作成された String オブジェクトへの参照が保存されます。一致する文字列がプールにすでに存在する場合、新しいオブジェクトを作成する代わりに、既存のオブジェクトへの参照が使用されます。
不変性と文字列定数プール
不変性は再生されます。これは、文字列定数プールが効果的に機能する上で重要な役割を果たします。複数の参照が同じ String オブジェクトを指す可能性があるため、1 つの参照でオブジェクトを変更できるようにすると、不整合が生じる可能性があります。したがって、String の不変性により、すべての参照が同じ値を指し、一貫性が維持されます。
String クラスのファイナリティ
String メソッドの動作を防ぐためオーバーライドされると、String クラスは「final」としてマークされます。これにより、サブクラスが String オブジェクトのデフォルトの動作を変更することがなくなり、その不変の性質が維持されます。
以上がJava 文字列は不変です: それは実際には何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。