【发布时间】:2012-12-13 01:49:15
【问题描述】:
由于 Java 中运算符优先级的正确性,我感到困惑。我很久以前在教程中读到 AND 的优先级高于 OR,question 中提供的答案证实了这一点。但是,我目前正在使用“Sun Certified Programmer for Java 6 Study Guide”学习 Java。本书包含以下示例:
int y = 5;
int x = 2;
if ((x > 3) && (y < 2) | doStuff()) {
System.out.println("true");
}
我复制并引用编译器如何处理上述代码的解释:
If (x > 3)是true,并且要么是(y < 2),要么是doStuff()是true,然后打印"true"。由于 短路&&,表达式被评估,好像有(y < 2) | doStuff()周围的括号。换句话说,它是 在&&和单个表达式之前评估为单个表达式&&之后的表达式。
这意味着| 的优先级高于&&。是不是因为使用了“非短路OR”而不是短路OR?什么是真的?
【问题讨论】:
-
可能是书中的印刷错误。按位或 b/w
(y<2)和doStuff()没有意义。此外,解释说“要么 y -
可能不是按位或,再检查一次。
-
|与||不同。一种是按位。另一个是合乎逻辑的。 -
好的,假名,不是“按位或”而是“非短路或”。
-
为了更容易理解,即使没有必要,我更喜欢多做一些括号。