为什么这个布尔语句是真的?
a= 10;
b = 0;
7 < a || a == b && b > 9 - a / b
因为除以0的任何内容都是错误
答案 0 :(得分:7)
由于OR(||
)运算符(a> 7)的第一个操作数计算为true
,因此它会短路并且不会评估任何其他值。因此,整个表达式的计算结果为true
。
答案 1 :(得分:1)
7 < a
返回true。由于它是||
之后,其余部分不会被执行。
这是因为true || false
是真的,true || true
也是如此,所以评估第二个成员只是浪费时间。
答案 2 :(得分:1)
您的OR运算符||
使用延迟评估或short-circuit evaluation。这意味着,因为第一个表达式7 < a
为真,所以它不会评估任何其他语句,包括除以零的语句,因为java已经发现了一些真值。
如果您确实想要收到错误,可以使用此OR运算符|
,它应该强制执行所有语句的评估。大多数只将它用作按位运算符,但它也是||
的非短路版本。要更深入地了解||
与|
,请查看here。
例如,
boolean c = (7 < a | a == b && b > 9 - a / b);
将导致ArithmeticExcption,如预期的那样。