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

时间:2015-11-25 11:02:10

标签: java string operator-precedence

我无法弄清楚以下行为,

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

5 个答案:

答案 0 :(得分:8)

+ has higher precedence than ==
所以你的代码:

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

实际上是

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

所以,你得到false

案例-2

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

您已明确使用大括号将str1str2true)进行比较,然后附加值。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

这是因为运营商优先。

在第一个语句中,+运算符在==和“str1 == str2”附加到str1之前执行,之后将追加的结果与{ {1}}至==

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

答案 3 :(得分:0)

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

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

“str1 == str2”+ str1

即>>> “str1 == str2 str1”等于str2或不等于

  

这就是为什么它将其打印为false

答案 4 :(得分:0)

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