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

Why doesn't this if statement fail?

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

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

根据 precedence rules5 / 0 不会在 6 > 5 之前执行,所以我的印象是这段代码会由于被零除异常而失败.

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

但是,那些优先规则让 5 / 0 看起来会先执行?

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

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

这将抛出一个 ArithmeticException 因为双方都被评估了。