由于Java中运算符优先级的正确性,我感到困惑。我在教程很久以前读到并具有更高的优先级高于OR,这是在提供的答案确认问题。但是,我目前正在使用《 Sun Java 6认证程序员学习指南》学习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()。换句话说,它被评估为之前的&&单个表达式和之后的单个表达式&&。
If (x > 3)
true
(y < 2)
doStuff()
"true"
&&
(y < 2) | doStuff()
尽管这意味着|比的优先级更高&&。是否由于使用“非短路OR”而不是短路OR?什么是真的?
|
那是因为它使用的是|运算符而不是||,它具有更高的优先级。这是桌子。
||
改用||运算符,它将按照您的想法进行。