我无法弄清楚以下行为,
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
答案 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));
您已明确使用大括号将str1
与str2
(true
)进行比较,然后附加值。
答案 1 :(得分:1)
传递给println的参数从左到右进行评估。
因此"str1==str2 "+ str1
连接两个字符串,后来与str2
进行比较并返回一个布尔值。
答案 2 :(得分:0)
这是因为运营商优先。
在第一个语句中,+
运算符在==
和“str1 == str2”附加到str1
之前执行,之后将追加的结果与{ {1}}至==
。
在第二个语句中,括号str2
表示在顶级运算符(即()
)发生之前应评估的原子片段。这就是为什么首先将+
与str1
与str2
进行比较,然后将结果(==
)作为字符串附加到true
答案 3 :(得分:0)
System.out.println("str1==str2 "+ str1==str2);
在上面一行中,编译器检查是否
“str1 == str2”+ str1
即>>> “str1 == str2 str1”等于str2或不等于
这就是为什么它将其打印为false
答案 4 :(得分:0)
应始终使用equals
方法比较两个字符串。否则你比较它是否是相同的参考,而不是相同的值!