【发布时间】:2017-01-26 11:54:24
【问题描述】:
这段代码不应该产生被零除的异常吗?
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 会先被执行?
【问题讨论】:
-
"根据优先规则,5 / 0 不会在 6 > 5 之前执行" 哪个优先规则让你这么认为?
-
if 语句从左到右计算
-
没有。事实上,您的第二个测试是死代码(因为六总是大于五)。您可以通过交换测试的顺序来验证这一点。此外,单个
|会按照您的预期工作,因为它不会短路(它仍然从左到右评估)。if (6 > 5 | 5 / 0 == 0)
标签: java if-statement lazy-evaluation short-circuiting