在使用短路操作符&&
和||
时,我得到了意想不到的结果。
if(false && false || true) {
System.out.println("true");
} else {
System.out.println("false");
}
它给了我true
但是根据短路规则,如果第一个操作数是false
,那么就没有必要评估第二个操作数。任何人都可以在我错过的地方解释它。
答案 0 :(得分:5)
(false && false) || true
首先评估。短路给出false
,因此||
不能短路,因此得到充分评估,
答案 1 :(得分:5)
我的解释是,因为&&
运算符的优先级高于||
(根据this table),语句将被解释为(false && false) || true
。
然后评估为false || true
,当然是true
。我可能错了,但那似乎正在发生。
答案 2 :(得分:0)
您没有正确阅读短路规则。
您声明的规则仅适用于AND(&&)操作。显然,第一次操作的结果是错误的。现在您需要执行第二个操作OR(||)。 OR的规则完全相反,如果第一个操作数为TRUE,则第二个操作数不需要进行评估。在您的情况下,第一个操作数为false,因此||的第二个操作数需要评估。第二个操作数的结果是真的。所以整个表达的结果都是真的。
答案 3 :(得分:0)
我认为从JDK 7
开始重新定义了短路规则,因为当我尝试在JDK 6
中运行时,它给出了正确答案但是当我在JDK 7
中运行它时,它给出了我意想不到的结果。