我正在==
中直接检查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
答案 0 :(得分:8)
System.out.println("s1==s2 is:"+ s1==s2);
将"s1==s2 is:"+ s1
与s2
进行比较,因此返回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