比较变量时的前缀和后缀增量

时间:2012-11-03 16:54:00

标签: java if-statement prefix postfix-notation

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

not equals
not equals 2

在第一个if语句中,似乎a = 0 b / c是后缀增量;因此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");
       }

   } 

3 个答案:

答案 0 :(得分:1)

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

在这些情况下,重要的不是运营商是'前缀'还是'后缀'

答案 1 :(得分:0)

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

因为

  • a已经2(已增加两次)
  • ++a3所以
  • 3 == 2false,因为在评估之前会应用前缀。

答案 2 :(得分:0)

a ++(后增量)将增加第一个然后将其分配给变量。在你的第一个案例中

(a ++ == a ++)在第一个后期增量中,一个值将先增加1但尚未分配,但是当它到达第二个a ++时,现在分配一个值,然后再次递增它。

例如

if say a=0;

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

所以现在评估if后a值为2。

第二个案例

(++a==2) here a would be incremented to 3 , (3==2) which is false thus the else if executed