我在做一个练习计算机科学测试,并尝试了这个问题。字符串布尔混淆
String sam = "scary";
String ben = new String("scary");
String wil = "scary";
out.print(sam == ben);
out.print(" " + (sam == wil));
从我的知识,我想打印出来的会是虚假,因为据我所知,字符串只能与.equals()比较。但我错了。它说答案是错误的。有人可以解释为什么吗?
我在做一个练习计算机科学测试,并尝试了这个问题。字符串布尔混淆
String sam = "scary";
String ben = new String("scary");
String wil = "scary";
out.print(sam == ben);
out.print(" " + (sam == wil));
从我的知识,我想打印出来的会是虚假,因为据我所知,字符串只能与.equals()比较。但我错了。它说答案是错误的。有人可以解释为什么吗?
您可以比较字符串与==
。然而,它比较字符串引用而不是字符序列。
如果两个字符序列不同,==
将始终评估为false
。如果它们相同,==
可能会返回true
或返回false
;这取决于两个字符串对象是如何存在的。
原因sam
和wil
指代相同的对象在JLS §3.10.5 String Literals阐明:
字符串文本 - 或,更一般地,其是常量表达式的(§15.28)的值的字符串 - 被“拘留”以便使用方法
String.intern
共享独特的实例。
有关此行为的详细说明,请参阅JLS中的示例3.10.5-1。
当您创建没有新单词的字符串时,jre会在您之前创建的字符串池中搜索具有相同内容的字符串,如果它找到一个字符串,则不需要在内存中创建新字符串只是将新的字符串引用到您之前创建的字符串中。另一方面通过使用新的关键字,你迫使创建一个新的对象。
这是什么语言? – Neal
我正在使用Java – user2990622
因此下次将[java]标记添加到您的问题@ user2990622 – Neal