在java(或c语言,这里以java为主)里面,i++和++i对于初学者来说,一直是一个特别容易搞混的内容,特别是那种 i=i++ 或 i=++i 这种求 i 的值。
不过今天不用怕,看完这篇文章,相信你一定能搞清楚这俩个的区别!
基本概念
i++和++i的作用都是自增加一,但是两者的返回结果却不一样的。为什么呢?这主要得益于 java的中间缓存机制。
快速区分
i++
返回值是 i 的初始值,但i本身是变化了的。
原理:先把初始的 i 的值存入临时缓冲区,对栈中的 i 进行加1操作,操作完毕后,出栈,但是最后返回的是临时变量区里面的值(原来初始 i 值)。jvm把它当作2个不同的变量了。
i=i++ 等效于
tmp=i;
i=i+1;
i=tmp
++i
返回值是 i+1的值,i本身是不变的。
原理:与i++相反,jvm将i值拷贝,将复制体(拷贝的i值)入栈操作加1,然后出栈,返回出栈的值。原始 i 不变。
i=++i 等效于
tmp=i;
tmp=tmp+1;
i=tmp
总结
所以,i=i+1 和 i=i++ 是不一样的!!!而i=++i 则是等效于 i=i+1 的。