1 局部变量和成员变量区别
区别一:定义的位置不同
定义在类中的变量是成员变量
定义在方法中或者{}语句里面的变量是局部变量
区别二:在内存中的位置不同
成员变量存储在堆内存的对象中
局部变量存储在栈内存的方法中
区别三:生命周期不同
成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失
局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失
区别四:初始化不同
成员变量因为在堆内存中,所有默认的初始化值
局部变量没有默认的初始化值,必须手动的给其赋值才可以使用。
public class GirlFriend { String name; double height; String hair; public void speak(){ //解决局部变量和成员变量同名的问题,用this区分 System.out.println("我叫"+name+",身高"+height+","+hair+",大波浪"); }}
2 基本类型和引用类型作为参数传递
1.基本类型作为参数传递时,其实就是将基本类型变量x空间中的值复制了一份传递给调用的方法show(),当在show()方法中x接受到了复制的值,再在show()方法中对x变量进行操作,这时只会影响到show中的x。当show方法执行完成,弹栈后,程序又回到main方法执行,main方法中的x值还是原来的值。
2.当引用变量作为参数传递时,这时其实是将引用变量空间中的内存地址(引用)复制了一份传递给了show方法的d引用变量。这时会有两个引用同时指向堆中的同一个对象。
public class Demo01 { //参数传递 public static void main(String[] args) { int a=1; method01(a); System.out.println(a);//1 //引用数据类型传递--对象 Person p=new Person(); p.name="杨超越"; p.age=18; method02(p); p.speak(); } //基本数据类型传递 public static void method01(int a){ a=2; } public static void method02(Person p){ p.name="岳云鹏"; p.age=45; }}