Java では String クラスが不変または Final なのはなぜですか?

WBOY
リリース: 2023-08-20 22:05:09
転載
1021 人が閲覧しました

Java では String クラスが不変または Final なのはなぜですか?

文字列が不変であるということは、オブジェクト自体は変更できないが、オブジェクトへの参照は変更できることを意味します。この文字列は、他の人が文字列を拡張してその不変性を破壊できないようにするために最終的に作成されます。

  • セキュリティ パラメータは通常、ネットワーク接続、データベース接続 URL、ユーザー名/パスワードで文字列として表されます。など。可変であれば、これらのパラメータは簡単に変更できます。
  • 同期と同時実行String を不変にすると、自動的にスレッド セーフになり、同期の問題が解決されます。
  • キャッシュ コンパイラが String オブジェクトを最適化するときに、2 つのオブジェクトが同じ値 (a = "test" と b = "test") を持っているように見えるため、必要な文字列オブジェクトは 1 つだけです (両方のオブジェクトに対して)。および b、これら 2 つは同じオブジェクトを指します)。
  • クラス ロード 文字列はクラス ロードの引数として使用されます。可変の場合、間違ったクラスがロードされる可能性があります (可変オブジェクトの状態が変化するため)。

例:

public class StringImmutableDemo {
   public static void main(String[] args) {
      String st1 = "Tutorials";
      String st2 = "Point";
      System.out.println("The hascode of st1 = " + st1.hashCode());
      System.out.println("The hascode of st2 = " + st2.hashCode());
      st1 = st1 + st2;
      System.out.println("The Hashcode after st1 is changed : "+ st1.hashCode());
   }
}
ログイン後にコピー

出力:

The hascode of st1 = -594386763
The hascode of st2 = 77292912
The Hashcode after st1 is changed : 962735579
ログイン後にコピー

以上がJava では String クラスが不変または Final なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート