局部变量存栈、方法调用时分配并释放,无默认值需显式初始化,作用域限于代码块;成员变量存堆、随对象创建销毁,有默认值,属对象且可被类内方法访问;静态成员变量存方法区、随类加载卸载,有默认值且所有实例共享。

局部变量和成员变量在内存分配位置、生命周期起止时间、初始化方式以及作用域范围上都有本质区别。
内存分配位置不同
局部变量存储在栈内存(Stack)中,每次方法调用时为其分配空间,方法执行结束立即释放;
成员变量(即实例变量)存储在堆内存(Heap)中,随对象的创建而分配,随对象被垃圾回收而释放。
静态成员变量则存放在方法区(Method Area)(JDK 8+ 中为元空间),属于类级别,随类加载而存在,随类卸载而消失。
生命周期起点与终点不同
局部变量:从声明处开始存在,到所在代码块(如方法、if、for)执行结束为止;
成员变量:随对象实例化(new 出对象)而诞生,随该对象不再被引用且被 GC 回收而终结;
静态成员变量:随类加载完成而初始化,整个程序运行期间一直存在(除非显式卸载类,一般不发生)。
默认初始化规则不同
局部变量:不会自动初始化,必须显式赋值后才能使用,否则编译报错;
成员变量:有默认初始值,如 int 为 0、boolean 为 false、引用类型为 null;
静态成员变量同样有默认初始值,且只初始化一次。
作用域与可见性不同
局部变量:仅在其声明所在的代码块内可见,不可被其他方法或对象直接访问;
成员变量:属于对象的一部分,可通过对象引用在类内任意方法中访问(取决于访问修饰符);
静态成员变量:属于类本身,可通过类名或对象访问(推荐类名),所有实例共享同一份数据。










