2023.10.29
1.不是局部变量在该方法被执行/调用时创建,而是应该为在该变量被声明并赋值时创建,可以理解为“当代码执行到该变量被赋值的代码时才被创建”。栈会为每个方法在运行的时候分配一块独立的栈帧内存区域,栈帧又包含“局部变量表”、“操作数栈”、“动态链接”以及“方法出口”四个部分。
Sec A: 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();} }Sec B: 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();} }
A和B的代码看上去是一样的,都是在test方法的第一行声明了一个int a,A在最后会给a赋值,就会将对应的常量入栈,然后以istore_指令存给对应的局部变量,而在代码B中,就没有这个操作。