- 首先明白一个概念,jvm是怎么执行加减操作的,首先明确局部变量表,简单来说就是存储一个函数变量的地方,然后就是操作数栈,就是要执行加减操作的时候,数字要从局部变量表先加载到操作数栈,然后加减指令才从操作数栈里拿数去做操作。
- 源程序
public class Test { public static void main(String[] args) { int i = 1; i = i++; } }
这个程序简单到不能再简单了,再看看它反编译后的代码
Compiled from "Test.java" public class Test { public Test(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]); Code: 0: iconst_1 ===>变量1 存储操作数栈 1: istore_1 ===>将栈顶元素赋值给局部局部变量1 2: iload_1 ===>将局部变量1 入栈 3: iinc 1, 1 ===》将局部变量表的1号元素加1 6: istore_1 ===>弹出栈顶元素,并且把它赋值给局部变量1号元素 7: return }
-
接下来是重点了 : 流程是这样子的,首先把 i 读取出来,放到一个栈中,然后把 i 自加, 然后把栈中的数字赋值给 i, 所以, i 的 值是发生过变化的,只不过后来被覆盖了。
面试准备 i++为什么不会改变 i 的值
最新推荐文章于 2022-03-01 18:08:44 发布