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