在这个例子中,我认为结果是真的。我以为变量存储在字符串池中。 答案是:返回false,因为两个String对象在内存中不一样。一个直接来自字符串池,另一个来自使用String操作构建。
String a = "";
a += 2;
a += 'c';
a += false;
if ( a == "2cfalse") System.out.println("==");
我不明白存储变量a的位置
答案 0 :(得分:3)
好的,所以有两个回应。首先,道德上正确的,不要使用==
测试字符串,始终使用.equals()
或.equalsIgnoreCase()
。
其次,确实是"a" == "a"
,因为字符串存储在同一个池中,就像你所说的那样。这里的问题是你追加它。附加到字符串会导致它变为不同的字符串,该字符串不存储在字符串池中。字符串池仅在编译时生成,并且第二个字符串是在运行时计算的,它与在编译时生成的字符串不匹配。
想象一个字符串池就像这样工作:
a = "test";
b = "te";
c = "st";
d = "test";
编译器将其转换为
sp1 = "test";
sp2 = "te";
sp3 = "st";
a = sp1;
b = sp2;
c = sp3;
d = sp1;
现在==
将检查两个变量是否引用相同的sp。如果你运行b + c
java将不会返回并检查是否有任何sp与此相同。它只在编译时才这样做。