变量自增的原理:i++和++i

发布时间 2023-09-27 19:46:11作者: 万里阳光号船长

知识前景:在java虚拟机的运行时数据中有一块地方叫虚拟机栈,每个线程独有。栈中存放一个一个栈针,每个栈针对应程序中的一个方法,若有main方法则位于最底层。栈针中有一个局部变量表:记录局部变量;和一个操作数栈:便于执行指令操作。
i++和++i的操作不同于其他的赋值和加减乘除等操作,它是直接在局部变量表中操作,赋值和加减乘除需要使用到操作数栈。

int i = 10;
int i = i++;

在执行i = i++这行代码时,会先将i的值10放入操作数栈,然后将局部变量表中的i加1,最后将操作数栈中的值出栈并赋给局部变量表中的i,总共有如下三步:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以结果为i = 10。

int i = 10;
int i = ++i;

在执行i = ++i这行代码时,会先将局部变量表中的i加1,然后将i的值11放入操作数栈,最后将操作数栈中的值出栈并赋给局部变量表中的i,总共有如下三步:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
所以结果为i = 11。

所以只要记住这两种操作,无论什么组合都可以轻易得出答案。如

int i = 10;
int i = i++ + ++i;

总共有如下几步:

  1. i++操作先将局部变量表中的10放入操作数栈,然后将局部变量中的i加1变为11;
  2. ++i操作先将局部变量中的i加1变为12,然后将局部变量表中的12放入操作数栈;
  3. 将操作数栈中的10和12相加得到22,赋值给局部变量表中的i。

所以结果为i = 22。