C:在方法中定义的局部变量在该方法被执行时创建
public class Demo { public void test() { int a; int b = 5; int c = b + 4; a = 2; } public static void main(String[] args) { Demo demo = new Demo(); demo.test(); } }
0:iconst_5,表示将一个int类型的常量5,压入操作数栈中
1:istore_2,表示将这个int值从栈中取出,存储到局部变量_2中(代码为变量b)
2:iload_2,表示将变量2,int类型的值取出,压到操作数栈
3:iconst_4,表示将一个int类型的常量4,压入操作数栈中
4:iadd,执行int类型的加***将操作数栈的4和5从栈中弹出并相加,将结果压入操作数栈中
5:istore_3,表示将这个int值从栈中取出,存储到局部变量_3中(代码为变量c)
6:iconst_2,表示将一个int类型的常量2,压入操作数栈中
7:istore_1,表示将这个int值从栈中取出,存储到局部变量_1中(代码为变量a)
8:return,方法结束,返回
public class Demo { public void test() { int a; int b = 5; int c = b + 4; } public static void main(String[] args) { Demo demo = new Demo(); demo.test(); } }
参考:[小白都能看得懂的Java虚拟机内存模型]https://zhuanlan.zhihu.com/p/98337005[通过javap命令分析java汇编指令]https://www.jianshu.com/p/6a8997560b05