前备知识:
/* # 栈帧:虚拟机运行时数据区中的虚拟机栈的栈元素,是用于支持虚拟机进行方法调用和 方法执行的数据结构。每个栈帧都包含 局部变量表、操作数栈、返回地址、动态连接等 信息。每一个方法的开始调用和执行完成都对应着栈帧在虚拟机栈中的入栈/出栈的过程。 # 1、局部变量表内有参数和局部变量,用索引进行访问 # 2、操作数栈可理解为用于进行计算的临时数据存储区,用弹栈/压栈进行访问,局部变量表 中的byte、char、short型的数据在压入操作数栈前会被转成int型数据 */
// EG1
int i = 1;
// ①”int i“:局部变量表生成标识为i的变量
// ②”1“:将int型1压入操作数栈
// ③”=“:1弹栈赋给局部变量表中的i
i = i++;
// ①将1压操作数栈
// ②局部变量表中的i自增变为2
// ③操作数栈中的1弹栈赋给i,i为1
System.out.println(i);
// EG2 提升
int j = 1;
j = j++ + ++j;
// ①”j++“:1入操作数栈,局部变量表中的j自增为2
// ②”++j“:局部变量表中的j自增为3,3入操作数栈
// ③”+“:操作数栈中的1和3相加为4
// ④”=“:4弹栈赋给局部变量表中的j,j为4
System.out.println(j);