猜猜以下代码的输出:

1
2
3
4
5
6
7
8
9
10
11
public class Test {

public static void main(String[] args) {
int i = 0;
for (int j = 0; j < 100; j++) {
i = i++;
}
System.out.println("result = " + i);
}

}

输出为:

1
result = 0

刚开始还以为是答案错误,在idea中运行了一下发现,还真是这样。

按照一般的思路,i = i ++ 应该分为两步:

  1. i = i
  2. i ++

结果应该为:

1
result = 100

上网查了一下:

i = i ++ 的步骤其实分为三步:

  1. 把变量i的值取出来,放在一个临时变量里(记作temp);
  2. 把变量i的值进行自加操作;
  3. 把临时变量temp的值作为自增运算前i的值使用;

经过以上三步操作以后,虽然变量i在第2步操作中进行了自增运算,但第3步操作以后又把原来的值赋给了它,故最后输出结果为0。

这个说法蛮靠谱的,我又使用c语言测试了一下,输出也为相同的结果。

参考博客: