-
定义位置不同:
- 成员变量:类中方法外
- 分为类变量(static修饰)、实例变量(没有使用static修饰)
- 局部变量:方法内、代码块内
-
默认值不同:
- 成员变量:有默认初始化值
- 局部变量:没有默认初始化值,必须显式赋值,方可使用
-
作用范围不同:
-
可用修饰符不同
- 成员变量:权限修饰符、static、final等
- 局部变量:不能用权限修饰符修饰,可以用final修饰
-
内存中位置不同:
- 成员变量:
- 静态变量(类变量):方法区
- 非静态变量(实例变量):堆
- 局部变量:栈
-
生命周期不同:
- 成员变量:
- 静态变量(类变量):和类相同
- 非静态变量(实例变量):和所属的对象相同,每一个对象是独立的
- 局部变量:从变量初始化到变量所在的方法或语句块执行结束
变量使用注意:
- 局部变量定义后,必须显式赋值才能使用,因为系统不会为局部变量执行初始化操作。这就意味着,定义局部变量后,系统并没有为这个变量分配内存空间。直到程序为这个变量赋值时,系统才会为局部变量分配内存,并将初始值保存到该内存中
- 基本数据类型局部变量:直接把这个变量的值保存到该变量所对应的内存中。
引用数据类型局部变量:变量对应内存中保存的是地址,通过该地址引用堆中的数据
- 栈内存中的变量无需垃圾回收器回收,其往往随方法或代码块的运行结束而结束
Java成员变量和局部变量的区别
原文:https://www.cnblogs.com/sun10367/p/13543669.html