目录
1、作用范围不同
成员变量的作用范围是当前类,位置是在类中方法外。
局部变量的作用范围是当前方法,位置是方法内或方法声明上
如下代码
public class Variable {
//成员变量
int num;
//成员方法
public void show(){
//局部变量
int num2=10;
}
}
2、变量初始值不同
public class Variable {
//成员变量
int num;
//成员方法
public void show(){
//局部变量
int num2=10;
System.out.println(num);//0 num为成员变量 也是全局变量 所以具有初始值为0
System.out.println(num2);//10
}
}
成员变量是具有初始值的,而局部变量没有,num为int类型,初始值为0,不同类型的初始值也不相同,如下图,是不同类型的成员变量对应的默认值。
3、生命周期不同
成员变量的生命周期是随着对象的创建而存在,随着对象的消失而消失。
局部变量的生命周期是随着方法的调用而存在,随着方法调用完毕而消失。
public class VariableDemo {
public static void main(String[] args) {
//创建variable类对象 此时成员变量num也被创建
Variable v=new Variable();
System.out.println(v.num);//0
//调用Variable类中的方法show 此时局部变量num2也被创建
v.show();
//调用show方法结束 局部变量num2消失
}
}
4、内存存储空间不同
成员变量因为在对象创建时被创建,所以存储在堆内存中,而局部变量是在方法内,方法结束就会消亡,所以存储在栈内存中。
5、成员变量和局部变量名字相同(就近原则)
public class Variable {
//成员变量
int num;
//成员方法
public void show(){
//局部变量
int num=100;
System.out.println(num);//100 因为局部变量距离输出最近,所以输出结果为100
}
}
当成员变量与局部变量名字相同时,就会按就近原则输出,因为局部变量int num=100距离最近,所以输出100。
欢迎大家在评论区讨论,补充我的不足之处,我会第一时间进行改正。