请问两种方式是否等价?
HashMap map = new HashMap<>();
map.put("abc", 1); //1
map.put("abc".intern(), 1);//2
高洛峰2017-04-17 16:12:00
.class ファイル内の定数プールは、実行時に JVM によってロードされ、拡張できます。 String の intern() メソッドは、定数プールを拡張するメソッドです。String インスタンス str が intern() メソッドを呼び出すと、Java は定数プール内に同じ Unicode の文字列定数があるかどうかを確認し、存在する場合は返します。そうでない場合は、str に等しい Unicode 文字列を定数プールに追加し、その参照を返します。
したがって、これら 2 つは同等である必要があります
PHPz2017-04-17 16:12:00
HashMap の put メソッドはキーのハッシュ値を計算するため、定数プールから String が返されても、新しい
intern() メソッドのコメントからわかるように、文字列定数プールから文字列が検索され、見つからない場合はその文字列が返されます。文字列を定数プールに追加してから戻ります。
プールにすでに
String
{@link #equals(Object)} メソッドの場合、プールからの文字列は
String
に追加されます。
String