Java System.out.println中字符串的相等性检查
我在Java System.out.println中字符串的相等性检查,java,Java,我在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 i
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
System.out.println(“s1==s2是:”+s1==s2)代码>比较“s1==s2是:“+s1
到s2
,因此返回false(s1==s2)
为true,因为两者都从字符串池获取引用的实例。它连接“s1==s2 is:”+s1,并检查是否相等,因为您得到的是false。您比较“s1==s2是:”+“abc”
与abc
在第一种情况下-->false
如果您看到+
具有更高的先例,那么首先字符串“s1==s2是:”+s1
将被连接,然后将其与s2
进行比较,这对于第一种情况是错误的,因为通过连接形成的第一个字符串将在堆中生成