Java String 的 intern() 方法问题
ringa_lee
ringa_lee 2017-04-17 16:10:00
0
3
802

请问两种方式是否等价?

    HashMap map = new HashMap<>();
    map.put("abc", 1); //1
    map.put("abc".intern(), 1);//2
ringa_lee
ringa_lee

ringa_lee

全員に返信(3)
小葫芦

.class ファイル内の定数プールは、実行時に JVM によってロードされ、拡張できます。 String の intern() メソッドは、定数プールを拡張するメソッドです。String インスタンス str が intern() メソッドを呼び出すと、Java は定数プール内に同じ Unicode の文字列定数があるかどうかを確認し、存在する場合は返します。そうでない場合は、str に等しい Unicode 文字列を定数プールに追加し、その参照を返します。
したがって、これら 2 つは同等である必要があります

いいねを押す +0
洪涛

は同等です。まず、2 番目のステートメントの intern() 自体は定数プールにコンパイルされるため、何も行いません。

いいねを押す +0
PHPzhong
  1. HashMap の put メソッドはキーのハッシュ値を計算するため、定数プールから String が返されても、新しい

  2. が返されても同じになります。
  3. intern() メソッドのコメントからわかるように、文字列定数プールから文字列が検索され、見つからない場合はその文字列が返されます。文字列を定数プールに追加してから戻ります。

      • プールにすでに

      • が含まれている場合、インターン メソッドが呼び出されるとき
      • String

        によって決定されるこの
      • オブジェクトと等しい文字列
      • {@link #equals(Object)} メソッドの場合、プールからの文字列は

      • それ以外の場合、この
      • オブジェクトは

        String に追加されます。

      • プールと、この
      • オブジェクトへの参照が返されます。

        String

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート