我收到奇怪的字符串 concat 行为,请帮助我了解这种行为。
String s3 = "ABC";
String s5 = new String(s3);
System.out.println("s5 == s3 "+ s5 == s3); // output: false
System.out.println("s5 == s3 "+ (s5 == s3)); // output: s5 == s3 false
应该首先打印 s5 == s3 false 而不是 false 吗?
答案 0 :(得分:3)
这是您第一个表达式的修改后的版本,其中显示false
:
System.out.println(("s5 == s3 " + s5) == s3); // "s5 == s3 ABC" == "ABC"
==
的优先级低于+
,因此先进行串联,然后进行比较。
要使其产生预期的输出,您需要覆盖此运算符的优先级,就像在第二个sysout
中所做的那样,它将比较的结果连接到字符串。
答案 1 :(得分:1)
因此,Java或任何语言都具有运算符优先级,这意味着某些操作先于其他操作发生。在第一行中,“ ==”的优先级比“ +”的优先级低(发生时间晚),因此优先级较高,因此输出是“ ==”操作的结果,即 false
在此处查看有关运算符优先级的更多信息: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html
答案 2 :(得分:0)
s5 == s3检查引用是否相同。
创建的s3是字符串池,s5是新对象,而不是引用s3。