短路运算符给我不同的结果

时间:2014-05-04 20:52:18

标签: java

在使用短路操作符&&||时,我得到了意想不到的结果。

    if(false && false || true) {
        System.out.println("true");
    } else {
        System.out.println("false");
    }

它给了我true但是根据短路规则,如果第一个操作数是false,那么就没有必要评估第二个操作数。任何人都可以在我错过的地方解释它。

4 个答案:

答案 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中运行它时,它给出了我意想不到的结果。