字符串连接和比较在println语句中给出了意外的结果

我无法弄清楚以下行为,

String str1= "abc"; String str2 = "abc"; System.out.println("str1==str2 "+ str1==str2); System.out.println("str1==str2 " + (str1==str2)) 

上述声明的输出如下:

str1 == str2 true

为什么会这样? 为什么输出不是如下:

str1 == str2 true

str1 == str2 true

+优先级高于==
所以你的代码:

 System.out.println("str1==str2 " + str1 == str2); 

会有效的

 System.out.println(("str1==str2 "+str1) == str2); 

所以,你false

在案例-2中

 System.out.println("str1==str2 " + (str1==str2)); 

你明确使用大括号来比较str1str2 (这是true ),然后追加值。

传递给println的参数从左到右进行评估。

因此"str1==str2 "+ str1连接两个字符串,后来与str2进行比较并返回一个布尔值。

这是因为运营商的优先权。

在第一个语句中, +运算符在==之前执行,“str1 == str2”附加到str1 ,之后将追加的结果与==str2进行比较。

在第二个语句中,括号()表示在顶级运算符(即+ )发生之前应该计算的primefaces块。 这就是为什么首先将str1str2==进行比较,然后将结果( true )作为字符串附加到"str1==str2 "

 System.out.println("str1==str2 "+ str1==str2); 

在上面的行中,编译器检查是否

“STR1 == str2的” + STR1

那就是>>>“str1 == str2 str1”等于str2与否

这就是它将它打印为假的原因

应始终使用equals方法比较两个String。 否则你比较它是否是相同的参考,而不是相同的值!