【发布时间】:2017-12-23 05:53:57
【问题描述】:
问题 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”将被实习,结果为真。但是,我不确定第二种情况。
问题 2
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。这是为什么呢?
【问题讨论】:
-
我们从未真正使用 == 运算符比较字符串,而是使用 .equals 方法
-
@JoeyPinto OP 使用
==了解 Java 内部结构,发现看起来很奇怪但有合理解释的行为。
标签: java string-concatenation string-interning