9

私は次のようなコードを持っています:

String str1 = new StringBuilder("计算机").append("软件").toString();
System.out.println(str1.intern() == str1); //true

String str2 = new StringBuilder("ja").append("va").toString();
System.out.println(str2.intern() == str2); //false

String str3 = new StringBuilder("Str").append("ing").toString();
System.out.println(str3.intern() == str3); //true

なぜstr1.intern() == str1str3.intern() == str3が正しいかは理解できますが、 はわかりませんstr2.intern() == str2。なぜこれが間違っているのですか?

私のJavaバージョンは: 1.8.0_73

4

2 に答える 2

17

String.intern() は、文字列リテラル プールに文字列を返します。ただし、文字列がプールに既に存在する場合は、既存の文字列が返されます。

新しい文字列を選択すると、作成した文字列が返されますが、たまたまプールに既に存在する文字列を使用すると、既存の文字列が取得されます。

この場合、"java"すでにプールに存在していると仮定するのが合理的であるため、intern() を呼び出すと、別のオブジェクトが返されるため==、false になります。

注:string.intern().equals(string)常に true にする必要があります。

于 2016-03-17T14:29:58.543 に答える