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

Vis*_*yan -1 java string operator-precedence

我无法弄清楚以下行为,

String str1= "abc";
String str2 = "abc";

System.out.println("str1==str2 "+ str1==str2);
System.out.println("str1==str2 " + (str1==str2))
Run Code Online (Sandbox Code Playgroud)

上述声明的输出如下:

str1 == str2 true

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

str1 == str2 true

str1 == str2 true

The*_*ind 8

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

System.out.println("str1==str2 " + str1 == str2);
Run Code Online (Sandbox Code Playgroud)

会有效的

System.out.println(("str1==str2 "+str1) == str2); 
Run Code Online (Sandbox Code Playgroud)

所以,你明白了false.

在案例-2中

System.out.println("str1==str2 " + (str1==str2));
Run Code Online (Sandbox Code Playgroud)

你用大括号明确地比较str1str2(这是true),然后附加价值.

  • @OP还有关于**运算符优先级**的更多信息,请参阅此java [doc](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html) (2认同)