繁体   English   中英

字符串连接和比较会在println语句中产生意外结果

[英]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));

您已使用花括号明确地将str1str2比较(这是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM