[英]String concatenation and comparison gives unexpected result in println statement
我不知道以下行为,
String str1= "abc";
String str2 = "abc";
System.out.println("str1==str2 "+ str1==str2);
System.out.println("str1==str2 " + (str1==str2))
以上语句的输出如下:
假
str1 == str2是
为什么会这样呢? 为什么输出不是这样的:
str1 == str2是
str1 == str2是
+
优先级高于==
。
所以你的代码:
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
。
在第二个语句中,括号()
表示在顶级运算符(即+
)发生之前应评估的原子片段。 这就是为什么第一str1
进行比较str2
与==
,然后将结果( true
)将被附加作为字符串到"str1==str2 "
System.out.println("str1==str2 "+ str1==str2);
在上一行中,编译器检查是否
“ str1 == str2” + str1
就是>>>“ str1 == str2 str1”是否等于str2
这就是为什么它将其打印为false
比较两个String应该始终使用equals
方法完成。 否则,如果比较的是相同的引用,而不是相同的值,则进行比较!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.