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 楼答案
不,不应该。逻辑运算符的第一个边是为了短路而计算的。If语句从左到右求值。在您的示例中,首先计算
6 > 5
,因为它位于逻辑运算符的左侧。这是真的,所以下一个条件没有被检查。现在,如果使用|
运算符,它将不会短路:这将抛出一个
ArithmeticException
,因为双方都会被评估