短路的布尔运算
布尔运算的一个重要特点是短路。即如果一个布尔运算的表达式能提前确定结果,则后续的计算不再执行,直接返回结果。
比如 false && x
,无论x是true还是false,结果肯定是false。因此,布尔运算在确定第一个值为false后,不再继续计算x,而是直接返回false。
下面程序输出结果为false。如果没有短路,&&后面的表达式会由于除数为0而报错,但实际上该语句并未报错,原因是后面的 (5 / 0 > 0)
不会被执行。
public class Main {
public static void main(String[] args) {
boolean b = 5 < 3;
boolean result = b && (5 / 0 > 0);
System.out.println(result);
}
}
如果不是布尔运算,除数为0会报异常
java.lang.ArithmeticException: / by zero
类似的,对于 ||
运算,只要能确定第一个值为true,后续计算也不再进行,而是直接返回true。
boolean result = true || (5 / 0 > 0); // true
他の者にできたか?ここまでやれたか?この先できるか?いいや、仆にしかできない!