java中方法内的局部变量是在什么时候被创建的

发布时间 2023-10-29 23:00:12作者: sellingpear

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中,就没有这个操作。