问题1
String a1 = "I Love" + " Java";
String a2 = "I Love " + "Java";
System.out.println( a1 == a2 ); // true
String b1 = "I Love";
b1 += " Java";
String b2 = "I Love ";
b2 += "Java";
System.out.println( b1 == b2 ); // false
在第一种情况下,我理解为将两个字符串字面量连接起来,所以结果"I Love Java"将被池化,从而得到true的结果。然而,我不确定第二种情况。
String a1 = "I Love" + " Java"; // line 1
String a2 = "I Love " + "Java"; // line 2
String b1 = "I Love";
b1 += " Java";
String b2 = "I Love ";
b2 += "Java";
String b3 = b1.intern();
System.out.println( b1 == b3 ); // false
上述代码返回false,但如果我注释掉第1行和第2行,则会返回true。为什么会这样?
==
来学习Java内部机制,发现了一些看起来相当奇怪但有合理解释的行为。 - Sergey Kalinichenko