-5
private static void v1() { //true
String s1 = new String("a") + new String("a");
s1.intern();
String s2 = "aa";
System.out.println("v1: " + (s1 == s2));
}
private static void v2() { //false
String s3 = new String("b") + new String("b");
String s4 = "bb";
s3.intern();
System.out.println("v2: " + (s3 == s4));
}
private static void v3() {// false
String s5 = new String("cc");
s5.intern();
String s6 = "cc";
System.out.println("v3: " + (s5 == s6));
}
private static void v4() {// false
String s7 = new String("dd");
String s8 = "dd";
s7.intern();
System.out.println("v4: " + (s7 == s8));
}
private static void v5() {// true
String s9 = new StringBuilder("e").append("e").toString();
s9.intern();
String s10 = "ee";
System.out.println("v5: " + (s9 == s10));
}
private static void v6() {// false
String s11 = new StringBuilder("e").append("e").toString();
String s12 = "ee";
s11.intern();
System.out.println("v6: " + (s11 == s12));
}
v1.valueは v2.valueが偽 v3.valueで真である偽 v4.valueが v5.valueがtrue falseである v6.valueはfalseですなぜS1 == s2が(インターンの順序に依存)
どうしますか?
なぜs1 == s2がintern()の順序に依存するのですか?
"s1.intern()"はs1を変更しますか? v1 == v5、v2 == v6ですか? jdk1.6と1.7の間にいくつかの違いがありますか?私は1.7を使用します。
ここではほとんど答えられています:[* Javaで文字列を比較する方法*](http://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java) –
'intern()'のためにドキュメントを読む必要があります。それはあなたが無視している戻り値を持っています。 – kdgregory
おそらく私の問題は正確に記述されていないでしょうか? 実際に、JVMの理解:高度な機能とベストプラクティスJdk1.6からの回答は、インスタンスを定数プールにコピーしてリファレンスに戻すことです。 1.7はオブジェクトへの定数プールへの参照です。ですから、s1 == s2を使って参照を比較すると、私は真実になります。 この質問は、参考文献の比較について気にするので、あなたのタグ付き「複製」とは関係ありません。 –