为什么不`index = index ++`increment`index`?

时间:2008-12-09 22:00:26

标签: java

** Dup:What's the difference between X = X++; vs X++;? **

所以,即使我知道你在代码中实际上不会这样做,我仍然很好奇:

public static void main(String[] args) {
    int index = 0;
    System.out.println(index);   // 0
    index++;
    System.out.println(index);   // 1
    index = index++;
    System.out.println(index);   // 1
    System.out.println(index++); // 1
    System.out.println(index);   // 2
}

请注意,第3 sysout仍为1。在我看来,行index = index++;的意思是“将索引设置为索引,然后将索引增加1”,方式相同System.out.println(index++);表示“将索引传递给println方法,然后将索引增加1”。

但事实并非如此。谁能解释一下发生了什么?

8 个答案:

答案 0 :(得分:4)

这是一个重复的问题。

编辑:我似乎无法找到原文:P哦很好

a = a ++使用postincrement,编译器将其解释为:

a = function() {
   var old_value = a;
   a++;
   return old_value;
}

编辑2: What's the difference between X = X++; vs X++;?

答案 1 :(得分:3)

value++;是后期增量。

int firtValue = 9;
int secondValue = firstValue++;

firstValue现在是10,但是secondValue是9,在它增加之前firstValue的值。

现在预先增加:

int firtValue = 9;
int secondValue = ++firstValue;

firstValue和secondValue现在是10,fistValue递增,然后它的值被赋值给secondValue。

答案 2 :(得分:1)

在评估表达式后进行赋值。所以index ++的值为0,尽管副作用索引会增加。然后将值(0)分配给索引。

答案 3 :(得分:1)

后增量运算符index++递增变量,但返回其旧值,因此

int i = 5;
System.out.println(i++);

将打印5但我现在等于6。

如果要在增量操作后使用++index

返回值

答案 4 :(得分:1)

我从来没有尝试过这样的事情,但我愿意在增量之后进行分配。

就编译器而言,真正发生的是:

  1. 评估指数
  2. 保留索引值以供日后使用
  3. 增加索引值
  4. 分配索引的旧值,从而消除增量。

答案 5 :(得分:0)

您必须查看评估事项的顺序。

在以下声明中

index = index ++;

发生了三件事 1)因为它是索引++,所以确定索引的值 2)索引递增, 3)然后将在步骤1中确定的值分配给等式左侧的变量

答案 6 :(得分:-1)

this问题的答案应有所帮助。 post增量确实会更新index的值,但它会在更新之前返回值。

答案 7 :(得分:-1)