下面我们来看一段代码
public static void main(String[] args) {
int ret = 1;
int a = 10;
ret = a++;
a = a++;
System.out.println(ret);
System.out.println(a);
}
大家可以估计一下输出的值
是不是 ret = 10 , a = 12 ?
但其实不是的 ret = 10 ,a = 11
其实这样赋值的本质是
java中 每个方法都有一个属于自己的地方,叫做栈帧
栈帧又分为:局部变量表,操作数栈等等
局部变量表 : 主要用户存储方法参数和定义在方法体内的局部变量
操作数栈 : 主要用于保存计算过程的中间结果,同时作为计算过程中变量临时的存储空间
下面就是 a = a++;的具体详细过程
先将 a的值 赋值一份到操作数栈中,然后在对局部变量表中的a加1,此时a = 12
然后将a = 11 的值从操作数栈中取出来赋值给a
这样就将a == 12的值给覆盖了
大家可以自己分析一下 ret = a++; 和 a = a++; 的区别