在System.out.println中进行字符串的相等性检查

3

我在使用System.out.println直接检查==运算符来比较字符串引用。我的疑惑是根据"字符串常量池"的规则,两个字符串将引用池中的同一实例,输出结果应该是"true",那么为什么第一次的输出结果是"false"。

以下是样例代码:

String s1 = "abc";         
String s2 = "abc";  
System.out.println("s1==s2 is:"+ s1==s2);  
System.out.println("s1==s2 with brackets is:"+ (s1==s2));

输出结果为:

false
s1==s2 with brackets is:true
4个回答

8

System.out.println("s1==s2 is:"+ s1==s2);比较"s1==s2 is:"+ s1s2,因此返回false。而(s1==s2)是true,因为它们都来自于字符串池中同一个实例。


1
如果您查看Java文档,则+的优先级高于==,因此首先将串联字符串"s1==s2 is:"+ s1,然后将其与s2进行比较,对于第一种情况,由于堆中会生成串联方式生成的第一个字符串,所以判断是错误的。

0

System.out.println("s1==s2 is:" + (s1.equals(s2))); -> 这段代码将“s1==s2 is:”与变量s1连接起来,并检查它们是否相等,因此你得到的结果是false。


0

您将"s1==s2 is:" + "abc"abc进行比较,在第一种情况下结果为false


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接