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 верно v6.value is falseПочему s1 == s2 зависит от порядка стажера()
Что случилось?
Почему s1 == s2 зависит от порядка от intern()?
«s1.intern()« изменить s1? Есть v1 == v5 и v2 == v6? Есть ли различия между jdk1.6 и 1.7? я использую 1.7.
Возможно, моя проблема не может быть точно описано? На самом деле, я получил ответ от «Понимание JVM: дополнительные функции и лучшие практики». Jdk1.6 intern, должен копировать экземпляр в постоянный пул и возвращаться к его ссылке; и 1.7 - ссылка на объект в постоянный пул. Поэтому, когда я использую s1 == s2 для сравнения ссылок, я получил правду. Этот вопрос не связан с вашим помеченным «дубликатом», потому что я забочусь о сравнении ссылок.
Как минимум в основном ответы здесь: [* Как сравнить строки в Java? *] (Http://stackoverflow.com/questions/513832/how-do-compare-strings-in-java) –
Вы необходимо прочитать документы для 'intern()'. Он имеет возвращаемое значение, которое вы игнорируете. – kdgregory
Возможно, моя проблема не совсем точно описана? На самом деле, я получил ответ от «Знакомство с JVM: дополнительные функции и лучшие практики». Jdk1.6 intern, заключается в том, чтобы скопировать экземпляр в постоянный пул и вернуться к его ссылке; и 1.7 - ссылка на объект в постоянный пул. Поэтому, когда я использую s1 == s2 для сравнения ссылок, я получил правду. Этот вопрос не связан с вашим помеченным «дубликатом», потому что я забочусь о сравнении ссылок. –