int i = 0;
boolean b = true;
System.out.println(b && !(i++ > 0))
当我编译上面的代码时,我得到了一个 true 值。
但那怎么可能呢,因为论证的第二部分(因为 b 已经为真)基本上转化为
(0 + 1 > 0) => (1 > 0)
应该返回true
。那么语句将是true && false
,即false
。
我错过了什么?
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++
将使用前value
一个i
,然后它会increment
它。
当你使用 ++ 时,就像
temp=i;
i += 1;
i=temp; // here old value of i.
值 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