0

有人可以解释为什么这个代码输出是

not equals
not equals 2

在第一个 if 语句中,a = 0 b/c 似乎是一个后缀增量;因此 a 直到下一行才会增加;但是,两个a不相等,为什么?第二个如果我运行调试器时a的值为2,但测试为假,为什么?

public static void main (String[] args)
   {
       int a = 0;
       if (a++ == a++) {
           System.out.println("equals");
       } else {
           System.out.println("not equals");
       }

       if (++a == 2) {
           System.out.println("equals 2");
       } else {
           System.out.println("not equals 2");
       }

   } 
4

3 回答 3

2

并不是说它要等到下一行。这==是一个“逻辑”运算符,因此首先计算每一侧的表达式,每个表达式都有增加“a”值的副作用。LHS 使用第 1 个增量的结果,RHS 使用第 2 个增量的结果。

在这些情况下,运算符是“前缀”还是“后缀”并不重要

于 2012-11-03T17:03:14.703 回答
0

编辑:刚刚意识到您还要求第一个不等于,这只是回答了第二个。

因为

  • a已经2(已经增加了两次)
  • ++a3这样的
  • 3 == 2false因为在评估之前应用了前缀。
于 2012-11-03T16:57:28.027 回答
0

a++(post increment) 将先增加 a 然后将其分配给变量。在你的第一种情况下

(a++==a++) 在第一个 post 增量中,一个值将首先增加 1 但尚未分配,但是当它到达第二个 a++ 时,现在分配了 a 值并且您正在再次增加它。

例如

if say a=0;

(a++==a++) would be (0==1)

所以现在在评估if.

对于你的第二个案例

(++a==2) here a would be incremented to 3 , (3==2) which is false thus the else if executed
于 2012-11-03T16:57:43.850 回答