关于Postfix Increment Operator ++的澄清:java
int i = 0; boolean b = true; System.out.println(b && !(i++ > 0))
当我编译上面的代码时,我得到一个值true。
但是怎么可能,因为论证的第二部分(因为b已经是真的)基本上转化为
(0 + 1 > 0) => (1 > 0)
哪个应该返回true
。 然后声明为true && false
,这是false
。
我错过了什么?
Java行为正确:)
i++
那是后缀增量。
它生成结果,然后稍后递增该值。
!(i++ > 0) // now value is still zero
i++
将使用i++
的先前value
,然后它将increment
它。
当你使用++时,它就像
temp=i; i += 1; i=temp; // here old value of i.
Postfix Increment Operator ++上的语言规范
将值1添加到变量的值中,并将总和存储回变量中。 ……
后缀增量表达式的值是存储新值之前的变量值。
可能的解决方案是++i
,根据您的要求,
前缀增量运算符++
前缀增量表达式的值是存储新值后变量的值。
如果要增加i并返回递增的值,则要使用++i
。 i++
返回非递增的值。
b && !(i++ > 0)
i++
是后增量因此i的值仍为0
0>0
假
b && 1
是真的(因为!(0)
是1)
所以你变得如此。
i++
在执行该行之后会发生增量,因此您最好保留
++i
您可以看到++运算符如何在以下示例中工作:
public static void main(String[] argv) { int zero = 0; System.out.println(zero++); zero = 0; System.out.println(++zero); }
结果是:0 1