学习来自《 编写高质量代码》
int a = 1;
a = ++a;
sout(a); //2
int i = 1;
i = i++;
sout(i); //1
++a返回的是2,这是正常的,但是 i = i++, 返回的确实1。很奇怪。
先分清,i++和++i的区别。
++i, 先加1,后赋值。
i++, 先赋值,后加加。
i++原理,其实i++是一个表达式,共有以下三个步骤。
1、 int temp = i; // 把i的值复制在一个临时区域
2、 i = i + 1; // 把i加1,并且赋值回i
3、return temp; // 返回temp赋值。
所以分析当执行 i = i++;,共执行以下三个步骤
1, temp = 1;
2, i = i + 1;
3, i = temp;
返回自然是最初值1了,因为i++先执行,被覆盖了。
总结:i++是一个表达式,可以在大多数的时候理解为,先赋值,后++。但是真正运行的顺序是,先++,返回++之前的值。