最近看Java Puzzlers,遇到一题:“谜题25:无情的增量操作”
int j=0;
for (int i = 0; i < 100; i++){
j = j++;
}
System.out.println(j);
结果是0,而在C语言中是100。
于是这就和我们平常认为的“后自增在执行语句赋值之后完成”不符了。
http://www.bitscn.com/plus/view.php?aid=20350
从上面的链接可以看到对应的内存执行方式。所以就我理解的正确顺序应该是:前自增-----制作变量副本(前自增结果包含其中)-----运算-----后自增-----由副本参与的运算结果赋值给左边。从这里可以看到,后自增放在其他赋值语句中,并没有参与其中的运算,只能让看程序的人更糊涂罢了。
所以说,没事别把后自增放在其他语句中。