关于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并返回递增的值,则要使用++ii++返回非递增的值。

 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