我正在做计算机科学测试练习并尝试了这个问题。
String sam = "scary";
String ben = new String("scary");
String wil = "scary";
out.print( sam == ben );
out.print( " " + (sam == wil) );
据我所知,我认为打印输出是 false false,因为据我所知,字符串只能与 .equals() 进行比较。但我错了。它说答案是假的。有人可以解释一下为什么吗?
最佳答案
您可以使用==
比较字符串。但是,它比较字符串引用而不是字符序列。
如果两个字符序列不同,==
将始终评估为 false
。如果相同,==
可能返回true
,也可能返回false
;这取决于两个字符串对象是如何存在的。
sam
和 wil
引用同一对象的原因在 JLS §3.10.5 String Literals 中有详细说明。 :
String literals - or, more generally, strings that are the values of constant expressions (§15.28) - are "interned" so as to share unique instances, using the method
String.intern
.
有关此行为的详细说明,请参阅 JLS 中的示例 3.10.5-1。
关于java - 字符串 boolean 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19987852/