なぜ、Stringオブジェクトは不変ですか?

  1. 文字列のプールは、Javaの文字列は不変であるため、可能でした。同じ変数文字列変数が異なるプールを参照することができますので、Javaランタイム環境は、このように、スタック多くのスペースを節約できます。文字列不変ではない場合、文字列が存在する(インターン文字列)、可能でないので、一度他の変数に反映されるいずれかによって参照変数の変更値列オブジェクト。
  2. 文字列は不変ではない場合、それは深刻なアプリケーションのセキュリティ上の脅威が発生する可能性があります。たとえば、データベースのユーザー名とパスワードは、データベース接続、取得するために文字列として渡されるソケットプログラミングだけでなくホストとポートの情報を。文字列は不変なので、そう、その値を変更することはできません。それ以外の場合は、任意のハッカーは、アプリケーションのセキュリティ問題につながることができ、その基準値、を改ざんすることができます。
  3. 文字列は不変であり、従って、それがためマルチスレッディングはにとって安全であり、異なるスレッド間の単一のStringインスタンスを共有することができます。これは、同期スレッドセーフの使用を避け、文字列は、暗黙的なスレッドセーフです。
  4. 文字列は不変であるJavaクラスローダで使用されるクラスローダが正しいクラスには、セキュリティを提供しますロードします。そうでなければ、あなたがロードしようとする、そのような危険な状況を考えて  java.sql.Connection 、あなたがた値に変更された参照、クラスを  myhacked.Connection、そしてあなたは、データベース上で操作を実行するためにそれを必要としません。
  5. 文字列は不変であるので、それが作成されたとき、それはハッシュコードをキャッシュされたため、再計算する必要がありません。これは、その処理の高速化以外に、理想的なターゲットキーマッピングになりHashMap 、高速のキータイプ。文字列がある理由です  HashMap 債券の最も一般的なタイプ。

おすすめ

転載: blog.csdn.net/xingqibaing/article/details/86526143