有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么这个if语句没有失败?

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

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

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

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

但是,这些优先规则使5 / 0看起来像是首先执行的


共 (1) 个答案

  1. # 1 楼答案

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

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

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