Прочитав о Java String Pool, я решил провести небольшой тест. Я написал следующую тестовую программу, которая не соответствует поведению Java String Pool в соответствии со спецификацией JDK.
public class Temp_20141220 {
private String b1 = "hello";
public static void main(String[] args) {
Temp_20141220 t = new Temp_20141220();
String b = "hello";
System.out.println("b==b1 =" + t.b1 == b);
}
}
Я ожидал получить выход: b == b1 = true, но я получил: b == b1 = false
Почему так? Поддерживает ли Ubuntu JVM эту функцию Java String Pool?
Эта
System.out.println("b==b1 =" + t.b1 == b);
эквивалентно
System.out.println( ("b==b1 =" + t.b1) == b);
Вы применяете ссылочное равенство между b
и конкатенацией "b==b1 ="
и t.b1
.
вы сравниваете две разные строки:
"b==b1 =" + t.b1
если вы измените свой код на:
System.out.println("b==b1 =" + (t.b1 == b));
вы получите истинное значение на выходе