java字符串concat奇怪的行为

时间:2019-12-20 04:59:47

标签: java string string-concatenation

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

3 个答案:

答案 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。