先贴上一段代码,大家想想输出结果:
public class MyMain {
public static void main(String[] args) {
int i = 100;
i = i++; //代码1
System.out.println(i);
}
}
控制台输出结果是:100
相信你想要的输出结果是101,当初自己的也是深信输出的是101,尼玛为什么这么神奇?当程序执行到代码1时,如果你认为 i++是先将i的值参与运算,然后才自增1的话,那么这种想法就错了,自己过去也一直是以这种思维去思考(先赋值,后自增),也一直没有发现错误,因为过去一直都是运行这样的语句:j = i++;后来直到遇到了i = i + 1这样的语句,才发现对于代码1,“先赋值,后自增”的描述是片面的。
代码1的关键在于i++的原理,在后置i++运算中,程序会首先保留i在执行自增之前的值x,然后将i的值自增1,而用来参与运算的值,是i在执行自增之前的值x。因此,i = i++的过程可以看似如下过程:
int temp = i; //程序保留i自增前的值
i = i + 1; //i自增
i = temp; //将自增前的值赋值给i
嗯,就酱紫。
注:++、--运算符的优先级要比=高。