由于Java中运算符优先级的正确性,我感到困惑。很久以前,我在教程中读到 AND 的优先级高于 OR,问题中提供的答案证实了这一点。但是,我目前正在使用“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)
istrue
和is(y < 2)
的其中一个或结果 ,然后 print 。由于短路,表达式被评估,就好像在 周围有括号一样。换句话说,它被评估为 之前的单个表达式和 之后的单个表达式。doStuff()
true
"true"
&&
(y < 2) | doStuff()
&&
&&
这意味着尽管 that|
具有比 更高的优先级&&
。是不是因为使用了“非短路OR”而不是短路OR?什么是真的?