有人可以解释为什么第 5 行代码只打印 false 而不是“Hello all false”。
谢谢
class Hello {
public static void main(String[] args) {
final String s1 = "Hello";
final String s2 = "hello all" + s1.length();
System.out.println("Hello all" + s1==s2);
}
}
Java 将最终表达式计算为 "(Hello all"+ s1) ==s2
,而不是 "Hello all"+ (s1==s2)
,因为你可能打算。
此外,从不将String
与==
进行比较,始终使用s1.equals(s2)
。 ==
检查两个字符串是否在内存中占用相同的位置。
添加括号,并更改为 .equals()
,它应该会按预期工作。
编辑
正如 Krystian 所建议的,值得指出的是在相等性检查之后执行加法的原因。
每个运算符都有一个优先级,表示在运算顺序不明确时(即没有足够的括号来完整描述顺序时)运算符的优先级。
例如,在计算表达式 1 + 2 * 3
时,它被分组为 1 + (2 * 3)
(就像在数学中一样),因为*
的优先级高于 +
。
==
也是一个运算符,因此也有优先级。它的优先级低于 +
,因此在 +
之后求值。
以下链接解释得更透彻,并附有所有运算符的优先级表:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html