我正在做一个练习计算机科学考试并尝试过这个问题。
String sam = "scary";
String ben = new String("scary");
String wil = "scary";
out.print( sam == ben );
out.print( " " + (sam == wil) );
据我所知,我认为打印输出是错误的,因为据我所知,字符串只能与.equals()进行比较。但我弄错了。它说答案是错误的。有人可以解释一下原因吗?
答案 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。