i++是在操作完成之后执行一次i=i+1,而++i则是在操作完成之前执行一次i=i+1。具体什么是操作完成,个人认为在java中应该是一步基本运算。因为java对于自增减运算符存在一个中间缓存变量机制。
对于i++来说,先将i存入一个中间变量temp,再将i自增1。即
temp=i;
i=i+1;
这个temp被用来参与实际的运算。
例如
int a=0,i=1;
a=(i++)+(i++);
求a与i的值?
一步一步来,第一个(i++)先缓存当前i的值到temp1:
temp1=i;
i自增:
i=i+1;
temp参与运算此时上式可以视为:
a=temp1+(i++);//此时temp1为1,i为2即a=1+(i++)
下面第二步,对第二个(i++):
temp2=i;//temp2=2
i=i+1;//i=3
temp2参与运算:
a=temp1+temp2=1+2=3;
最后a=3,i=3;
对于++i来说同理,只不过是先自增,再创建缓存变量:
i=i+1;
temp=i;