[英]equality check for Strings in System.out.println
我正在System.out.println
直接检查==
运算符以比较字符串引用。我怀疑是'字符串常量池'两个字符串将引用池中的相同实例,输出为'true'然后为什么第一个输出是'假'。
以下是示例代码:
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 is:"+ s1==s2);
比较"s1==s2 is:"+ s1
到s2
,因此返回false。 (s1==s2)
为真,因为它们都从String池中获取它们引用的实例。
如果你看到Java文档,那么+
得到更高的优先级然后==
所以首先字符串"s1==s2 is:"+ s1
将被连接然后它将被比较为s2
,这对于第一种情况是假的,因为第一个字符串由连接将在堆中生成。
System.out.println(“s1 == s2 is:”+ s1 == s2); - >它连接“s1 == s2 is:”+ s1并检查是否相等,因为你得到了错误。
你比较"s1==s2 is:" + "abc"
与abc
在第一种情况下 - > false
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.