1. 定义的位置
成员变量是定义在类中独立于方法外的变量,而局部变量是定义在类的方法中的变量;
2. 修饰符
成员变量可以被public,protected,private,static等修饰符修饰,而局部变量不能被这些权限修饰符修饰(局部变量本身就是一个访问权限的设定);
3. 作用范围
成员变量在整个类都可以用,局部变量只有在方法体内才有效,出了方法就不能在用了;
4. 内存位置
成员变量存储在堆当中,而局部变量储存在栈当中;
5. 默认初始值
成员变量如果没有赋值会自动使用默认的初始值,而局部变量没有默认的初始值,必须自行设定初始值;
6. 生命周期
成员变量随着对象的创建而创建,对象回收时,成员变量消失,局部变量随方法进栈而诞生,随访发出栈而消失。
7. 优先级
局部变量可以和成员变量同名,且在使用时,局部变量具有更高的优先级,直接使用同名访问,访问的是局部变量,如需要访问成员变量可以用 this.变量名进行访问。