字符串连接和比较在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));
你明确使用大括号来比较str1
和str2
(这是true
),然后追加值。
传递给println的参数从左到右进行评估。
因此"str1==str2 "+ str1
连接两个字符串,后来与str2
进行比较并返回一个布尔值。
这是因为运营商的优先权。
在第一个语句中, +
运算符在==
之前执行,“str1 == str2”附加到str1
,之后将追加的结果与==
与str2
进行比较。
在第二个语句中,括号()
表示在顶级运算符(即+
)发生之前应该计算的primefaces块。 这就是为什么首先将str1
与str2
与==
进行比较,然后将结果( true
)作为字符串附加到"str1==str2 "
System.out.println("str1==str2 "+ str1==str2);
在上面的行中,编译器检查是否
“STR1 == str2的” + STR1
那就是>>>“str1 == str2 str1”等于str2与否
这就是它将它打印为假的原因
应始终使用equals
方法比较两个String。 否则你比较它是否是相同的参考,而不是相同的值!