字符串布尔混淆

时间:2013-11-14 20:36:48

标签: java string boolean equals

我正在做一个练习计算机科学考试并尝试过这个问题。

String sam = "scary";
String ben = new String("scary");
String wil = "scary";
out.print( sam == ben );
out.print( " " + (sam == wil) );

据我所知,我认为打印输出是错误的,因为据我所知,字符串只能与.equals()进行比较。但我弄错了。它说答案是错误的。有人可以解释一下原因吗?

2 个答案:

答案 0 :(得分:4)

可以将字符串与==进行比较。但是,它会比较字符串引用而不是字符序列。

如果两个字符序列不同,==将始终评估为false。如果它们相同,则==可能会返回true或可能会返回false;这取决于两个字符串对象是如何形成的。

sam中列出了wil和{{1}}引用相同对象的原因:

  

字符串文字 - 或者更一般地说,作为常量表达式(JLS §3.10.5 String Literals)的值的字符串 - 被“实施”以便使用方法§15.28共享唯一实例。

有关此行为的详细说明,请参阅JLS中的示例3.10.5-1。

答案 1 :(得分:0)

当您创建没有新单词的字符串时,jre会在您之前为具有相同内容的String创建的字符串池中搜索,如果找到一个字符串,则无需在内存中创建新的字符串,只需将新String重新引用到之前创建的String。另一方面,通过使用new关键字,您将强制创建一个新的Object。