0

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

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

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

4

2 回答 2

4

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

如果两个字符序列不同,==将始终计算为false. 如果它们相同,==则可能返回true或可能返回false;这取决于两个字符串对象是如何存在的。

JLS §3.10.5 String Literals中详细说明了原因samwil引用同一对象:

字符串文字 - 或者更一般地说,作为常量表达式值的字符串(第 15.28 节) - 是“内部的”,以便使用方法共享唯一实例String.intern

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

于 2013-11-14T20:41:42.863 回答
0

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

于 2013-11-14T20:49:21.417 回答