int i = 0;
boolean b = true;
System.out.println(b && !(i++ > 0))
当我编译上面的代码时,我得到一个值true。
但是怎么可能呢,因为论证的第二部分(因为b已经是真的)基本上转化为
(0 + 1 > 0) => (1 > 0)
应返回true
。然后声明为true && false
,即false
。
我错过了什么?
答案 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
,这符合您的要求,
前缀增量表达式的值是存储新值后变量的值。
答案 1 :(得分:3)
如果要增加i并返回递增的值,则要使用++i
。 i++
返回非递增的值。
答案 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