SOS for Java布尔语句

时间:2017-05-15 13:06:32

标签: java

为什么这个布尔语句是真的?

a= 10;
b = 0;
7 < a || a == b && b > 9 - a / b

因为除以0的任何内容都是错误

3 个答案:

答案 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,如预期的那样。