代码之家  ›  专栏  ›  技术社区  ›  SCdF

为什么'index=index++'increment`index`?[复制品]

  •  0
  • SCdF  · 技术社区  · 17 年前

    *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
    }
    

    注意第三个 sysout 仍然是 1 . 在我的脑海里 index = index++; 表示“将索引设置为索引,然后以相同方式将索引增加1” System.out.println(index++); 表示“将索引传递到println方法,然后将索引增量1”。

    但情况并非如此。有人能解释一下发生了什么事吗?

    8 回复  |  直到 17 年前
        1
  •  4
  •   Community Mohan Dere    8 年前

    这是一个重复的问题。

    编辑: 我好像找不到原版了:哦,好吧。

    A=A++使用后增量,编译器将其解释为:

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

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

        2
  •  3
  •   Christian C. Salvadó    17 年前

    value++; 是后增量。

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

    firstvalue现在是10,secondvalue是9,firstvalue在递增之前的值。

    现在使用预增量:

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

    FirstValue和SecondValue现在为10,FistValue递增,然后将其值指定为SecondValue。

        3
  •  1
  •   recursive    17 年前

    赋值发生在表达式被计算之后。所以index++的值为0,尽管作为副作用的索引是递增的。然后将值(0)分配给索引。

        4
  •  1
  •   Jeff Mc    17 年前

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

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

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

    如果要在增量操作后返回值,请使用 ++index

        5
  •  1
  •   Uri    17 年前

    我从来没有尝试过这样的方法,但我愿意让这个任务发生在增量之后。

    因此,就编译器而言,真正发生的事情是:

    1. 评价指标
    2. 保留索引值供以后使用
    3. 增加索引值
    4. 指定索引的旧值,从而清除增量。
        6
  •  0
  •   Kevin    17 年前

    你必须看事物被评估的顺序。

    在下面的语句中

    index=索引++;

    发生了三件事 1)由于是index++,所以确定index的值 2)索引递增, 3)然后将步骤1中确定的值分配给方程式左侧的变量。

        7
  •  -1
  •   Community Mohan Dere    8 年前

    答案 this 这个问题应该有帮助。后增量确实会更新索引的值,但会返回更新前的值。