if-else布尔表达式(&&)是否在if-else语句之外增加一个变量,即使其中一个表达式为false?

时间:2015-05-18 15:35:16

标签: java

我正在Java编程书中练习,我遇到了这个:

假设x是1.评估以下表达式后x是什么?

A)

(x >= 1) && (x++ > 1)

B)

(x > 1) && (x++ > 1)

我理解 B)因为它先测试(x > 1)是假的,所以它不会测试(x++ > 1),因此不会增加x

但是,在 A) (x >= 1)为真,所以它也会(x++ > 1)进行测试,但(x++ > 1)为false。这是否意味着即使它是假的,变量x = 1仍在递增,因为表达式(x++ > 1)已被执行?

6 个答案:

答案 0 :(得分:4)

A)x> = 1为真,x ++> 1是假的,但x将变为2

答案 1 :(得分:1)

为了能够评估x ++是否低于1,它需要评估表达式x ++,所以这似乎是合理的,是的。如果要评估的表达式有副作用,则会调用它们。

答案 2 :(得分:1)

如果没有对表达式的评价,任何人都无法找到结果。所以你的答案是,因为你的表达式(x ++> 1)已被执行。

答案 3 :(得分:0)

java中的这些条件是短期的,这意味着只评估所需条件的最小数量。在B.)第一个条件是假的,操作员是&&所以整个表达式都是假的。无需执行第二个。

在A中。)第一个表达式为true,因此必须执行第二个表达式以确定整个表达式的结果。

答案 4 :(得分:0)

您正在使用后缀增量运算符,这意味着它将在计算表达式后递增变量的值。如果你这样做:

if ((x >= 1) && (++x > 1)) {
    System.out.println("hello");
} 

这是真的,因为我使用前缀增量运算符(第一个增量然后计算)。

答案 5 :(得分:-1)

(x ++> 1)几乎等于(x =(x + 1)> 1)。不同之处在于x在测试(x> 1)初始值之后递增。 因此,无论测试结果是真还是假,都无关紧要,在这两种情况下x都会增加。