为什么这个if语句不能失败?

时间:2016-09-18 20:11:52

标签: java if-statement lazy-evaluation short-circuiting

这段代码不应该产生除以零的异常吗?

public class Testing {
    public static void main(String[] args) {
        if(6 > 5 || 5 / 0 == 0)
            System.out.println("true");
    }
}

根据precedence rules5 / 0之前6 > 5不会执行,因此我认为此代码会因为除零异常而失败。< / p>

我知道java短路if语句。因此,如果第一个为真,那么它将评估为真,甚至不检查第二个。

但是,那些优先规则使5 / 0看起来好像先执行?

1 个答案:

答案 0 :(得分:1)

不,不应该。评估逻辑运算符的第一侧以便短路。如果陈述从左到右评估。在您的示例中,首先计算6 > 5,因为它位于逻辑运算符的左侧。这是真的,所以不检查下一个条件。现在,如果您使用|运算符,它将不会短路:

if(6 > 5 | 5 / 0 == 0) { ... }

这将抛出ArithmeticException,因为双方都会被评估。