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

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

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

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

应该返回true。那么语句将是true && false,即false

我错过了什么?

4

5 回答 5

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.

Postfix 增量运算符 ++ 的语言规范

值 1 被添加到变量的值中,并且总和被存储回变量中。……

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

可能的解决方案++i是,根据您的要求,

前缀增量运算符 ++

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

于 2013-10-15T07:03:35.967 回答
3

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

于 2013-10-15T07:04:05.750 回答
2
b && !(i++ > 0)

i++是后增量,所以这里 i 的值仍然是 0

0>0错误的

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

所以你越来越真实了。

于 2013-10-15T07:03:58.093 回答
1
i++

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

++i
于 2013-10-15T07:05:33.993 回答
1

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

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

结果是:0 1

于 2013-10-15T07:19:09.627 回答