java 字符串连接奇怪的行为

java string concat strange behavior

我遇到了奇怪的字符串 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 ?

这是第一个表达式的修改版本,它打印 false:

System.out.println(("s5 == s3 " + s5) == s3); // "s5 == s3 ABC" == "ABC"

==的优先级低于+,所以先拼接,再比较。

为了使其产生预期的输出,您需要覆盖此运算符优先级,就像您在第二个 sysout 中所做的那样,这会将比较结果连接到字符串。

s5 == s3 检查引用是否相同。

created 中的 s3 是字符串池,s5 是新对象,不引用 s3。

所以 Java 或任何语言都具有运算符优先级,这意味着某些操作先于其他操作发生。在第一行,“==”比“+”的优先级低(晚),后者发生的早,所以输出的是“==”运算的结果,即false

在此处查看有关运算符优先级的更多信息: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html