検索

ホームページ  >  に質問  >  本文

Java String 的 intern() 方法问题

请问两种方式是否等价?

    HashMap map = new HashMap<>();
    map.put("abc", 1); //1
    map.put("abc".intern(), 1);//2
ringa_leeringa_lee2803日前814

全員に返信(3)返信します

  • 高洛峰

    高洛峰2017-04-17 16:12:00

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

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 16:12:00

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

    返事
    0
  • PHPz

    PHPz2017-04-17 16:12:00

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

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

        • プールにすでに

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

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

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

          String に追加されます。

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

          String

      返事
      0
  • キャンセル返事