Why doesn't `index = index++` increment `index`?
**dup:x=x++;与x++;有什么区别?**
所以,尽管我知道你永远不会在代码中这样做,我还是很好奇:
1 2 3 4 5 6 7 8 9 10 |
注意,第3个
但情况并非如此。有人能解释一下发生了什么事吗?
这是一个重复的问题。
编辑:我好像找不到原版了:哦,好吧
A=A++使用后增量,编译器将其解释为:
1 2 3 4 5 | a = function() { var old_value = a; a++; return old_value; } |
编辑2:x=x++;与x++;有什么区别?
1 2 | int firtValue = 9; int secondValue = firstValue++; |
firstvalue现在是10,secondvalue是9,firstvalue在递增之前的值。
现在使用预增量:
1 2 | int firtValue = 9; int secondValue = ++firstValue; |
firstvalue和secondvalue现在为10,fistvalue递增,然后将其值指定为secondvalue。
我从来没有尝试过这样的方法,但我愿意让这个任务发生在增量之后。
因此,就编译器而言,真正发生的事情是:
后递增运算符
1 2 |
将打印5,但我现在等于6。
如果要在增量操作后返回值,请使用
赋值发生在表达式被计算之后。所以index++的值为0,尽管作为副作用的索引是递增的。然后将值(0)分配给索引。
你必须看事物被评估的顺序。
在下面的语句中
索引=索引++;
发生了三件事1)由于是index++,所以确定了index的值。2)索引递增,3)然后将步骤1中确定的值分配给方程式左侧的变量。
有关后缀评估规则的信息,请参阅http://java.sun.com/docs/books/jls/second_edition/html/typesValues.doc.html。
还可以看到http://java.xun.com /docs/jords/js/dixyEdit/HTML/Actudio.doc.html 39438信息。
这个问题的答案应该有帮助。后增量确实会更新索引的值,但会返回更新前的值。