我正在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)
已被执行?
答案 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都会增加。