** 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”。
但事实并非如此。谁能解释一下发生了什么?
答案 0 :(得分:4)
这是一个重复的问题。
编辑:我似乎无法找到原文:P哦很好
a = a ++使用postincrement,编译器将其解释为:
a = function() {
var old_value = a;
a++;
return old_value;
}
答案 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)
我从来没有尝试过这样的事情,但我愿意在增量之后进行分配。
就编译器而言,真正发生的是:
答案 5 :(得分:0)
您必须查看评估事项的顺序。
在以下声明中
index = index ++;
发生了三件事 1)因为它是索引++,所以确定索引的值 2)索引递增, 3)然后将在步骤1中确定的值分配给等式左侧的变量答案 6 :(得分:-1)
this问题的答案应有所帮助。 post增量确实会更新index的值,但它会在更新之前返回值。
答案 7 :(得分:-1)