
局部变量和成员变量的核心区别在于定义位置决定范围然后影响默认值、内存位置和生命周期成员变量定义、默认值、堆内存、生命周期和对象局部变量定义在方法或代码块中无默认值、堆内存、生命周期和方法。局部变量和成员变量的核心区别在于定义位置来确定功能范围从而影响默认值、内存位置和生命周期。理解这一点你可以自然地澄清其他差异。定义位置直接决定可以使用的位置成员变量写在类中和方法之外属于整个类的“属性”所有方法都可以访问(受访问修改符的限制)。局部变量写在方法、构造器或代码块中仅在其花括号范围内有效。比如在public void calculate() { int x 5; }中x只能在calculate内部使用方法而private int count;写在类体中任何方法之外都可以读写整个类的方法count也可以使用没有赋值的变量类型默认初始值为成员变量数字类型为0boolean是false引用类型是null。局部变量没有默认值必须在使用前进行显式赋值否则编译会直接报错。成员变量int age;→ 可直接打印值为0局部变量int score;→ 紧接着写System.out.println(score);会编译失败他们各自呆在哪里栈还是堆局部变量存在堆栈内存方法调用堆栈实施后立即弹出释放。成员变量属于对象的一部分对象存在堆积内存变量随对象的创建而分配并随对象被垃圾回收而清理。大量局部变量在频繁调用的方法中声明不会造成堆内存压力但可能会影响堆栈的深度一个对象包含多个成员变量它们共享堆中对象的生命周期什么时候出生什么时候灭实施局部变量生命的完全绑定方法方法开始→变量诞生方法结束→变量消失了。成员变量的生命绑定对象对象new出来的那一刻诞生了直到JVM判断它无法到达并回收。同一对象多次调用相同的方法每次都会新建局部变量但成员变量总是一样的局部变量不参与对象状态的保存成员变量是对象“记忆”的载体