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

时间:2015-08-18 06:36:35

标签: java

我正在==中直接检查System.out.println运算符,以便比较字符串引用。我怀疑的是字符串常量池'两个字符串都将引用池中的相同实例,输出结果为“真实”。那么为什么第一个输出是“假”'

以下是示例代码:

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 个答案:

答案 0 :(得分:8)

System.out.println("s1==s2 is:"+ s1==s2);"s1==s2 is:"+ s1s2进行比较,因此返回false。 (s1==s2)为真,因为它们都从String池中获取它们引用的实例。

答案 1 :(得分:1)

如果您看到Java docs +获得更高的优先级,那么==首先将字符串"s1==s2 is:"+ s1连接起来,然后将其与s2进行比较对于第一种情况,这是错误的,因为串联形成的第一个字符串将在堆中生成。

答案 2 :(得分:0)

System.out.println(“s1 == s2 is:”+ s1 == s2); - >它连接“s1 == s2 is:”+ s1并检查是否相等,因为你得到了错误。

答案 3 :(得分:0)

您在第一种情况下将"s1==s2 is:" + "abc"abc进行比较 - > false