i++
等价于
i = i + 1;
++i
等价于
i = i + 1;
两者的区别在于:执行顺序的不同。
打个比方:
a = i ++; 等价于 a = i; i = i + 1;
而:
a = ++ i; 等价于 i = i + 1; a = i;
这是初步理解。
更进一步
实际上的话,i++的执行大概是这样的[1]:
int temp = i;
i = i + 1;
return temp;
也就是说,i++也是先自增,再把之前的值赋过去。
理解一下这段话:
int i = 0;
i = i ++;
System.out.print(i);
答案是1还是0呢?
答案是0。
那么来推演一下:
初始化 i ,此时i的值0;
将i++赋值给i,i++中i先自增加,此时i的值为0 + 1 = 1;
但返回值是自增前的数,也就是0;
这个时候就相当于:
i = 0;
不管i现在是多少,最后走完这个赋值,都成了0;
实际上这一段就是用i=i++就是来绕的,理解成
i = 0;
x = i;
i = i + 1;
print(x);
就行了,输出的是那个i自增前的数。
循环
我们在循环中常见到:
for (int i = 0; i < 10; ++i) {
//TO DO
}
循环条件的最后自增用的是++i而不是i++,为什么呢?
还是前面那个原理,i++加入了一个变量用来存自增前的数,咱做循环,循环个几千次几万次那每次循环都加个变量,加着加着机器的负载不就变大了,那性能也肯定低了。
所以大部分循环里自增用的都是++i
最后
总结一下:
i++ 即后加加,原理是:创建变量存旧值,自增,然后旧值
++i 即前加加,原理是:自增,返回自增之后的值
参考博客
[1]一看就懂的i++与++i详解【精选】一看就懂的i++和++i详解_++i和i++-CSDN博客 作者:Android_cai_niao