关于Postfix Increment Operator ++的澄清:java

时间:2013-10-15 07:01:48

标签: java

int i = 0;
boolean b = true;
System.out.println(b && !(i++ > 0))

当我编译上面的代码时,我得到一个值true。

但是怎么可能呢,因为论证的第二部分(因为b已经是真的)基本上转化为

(0 + 1 > 0) => (1 > 0)

应返回true。然后声明为true && false,即false

我错过了什么?

5 个答案:

答案 0 :(得分:11)

Java行为正确:)

i++

后缀增量。

它生成结果,然后稍后递增该值。

!(i++ > 0) // now  value is still zero

i++将使用之前的value i,然后它increment

使用++时,就像

temp=i;
i += 1; 
i=temp;     // here old value of i.

language specification on Postfix Increment Operator ++

  

将值1添加到变量的值中,并将总和存储回变量中。 ......

     

后缀增量表达式的值是存储新值之前变量的值。

可能的解决方案是++i,这符合您的要求,

  

Prefix Increment Operator ++

     

前缀增量表达式的值是存储新值后变量的值。

答案 1 :(得分:3)

如果要增加i并返回递增的值,则要使用++ii++返回非递增的值。

答案 2 :(得分:2)

b && !(i++ > 0)

i++是后增量,因此i的值仍为0

0>0 false

b && 1为真(因为!(0)是1)

所以你变得如此。

答案 3 :(得分:1)

i++

在执行该行之后发生增量 所以你最好保持

++i

答案 4 :(得分:1)

您可以在以下示例中看到++运算符的工作原理:

public static void main(String[] argv) {
    int zero = 0;
    System.out.println(zero++);
    zero = 0;
    System.out.println(++zero);
}

结果是:     0     1