自增变量
前缀式:如 ++i。前缀式是先加1再使用。 后缀式:如 i++。后缀式是先使用再加1
运算规则:
(1)最后再进行赋值=的操作。
(2)=右边的从左到右加载的值依次压入操作数栈。
(3)根据运算符优先级判断计算顺序。
(4)自增、自减操作都是直接修改变量的值,不经过操作数栈。
注意 赋值=,最后计算
=右边的从左边加载值依次压入操作数栈
实际先算哪个,看运算符优先级
自增(++)自减(–) 运算符是一种特殊的算术运算符,在算术运算符中需要两个操作数来进行运算,而自增自减运算符是一个操作数。
栈帧
栈帧(stack frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。
Java虚拟机以方法作为基本的执行单位,“栈帧”是用于支持虚拟机进行方法调用和执行的数据结构,每一个方法从调用开始到执行结束,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的
虚拟机栈由栈帧组成,栈帧由局部变量表、操作数栈、动态链接和方法返回四部分组成,有的虚拟机还有一些附加信息。
操作数栈
操作数栈也称表达式栈 在方法执行过程中,根据字节码指令,往栈里写入数据或提取数据,即入栈/出栈。 某些字节码指令把值压入操作数栈,其余指令将操作数取出栈。
每一个栈帧中除了包含局部变量表以外,还包含一个后进先出的操作数栈,也称为表达式栈。 操作数栈在方法执行的时候,根据字节码指令,往栈中写入数据或提取数据,即入栈(push)/出栈(pop)。
操作数栈就是JVM执行引擎的一个工作区,当一个方法刚开始执行的时候,一个栈帧会随之创建出来。
例如,iadd指令将添加两个整数值,因此它将从操作数堆栈中弹出顶部的两个整数值,并将它们相加后将结果压入操作数堆栈。