public class Test7 {
public static void swap(DataSwap ds1) {
ds1.a=6;
System.out.println("在swap方法中ds1.a的值:"+ds1.a);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
DataSwap dSwap=new DataSwap();
System.out.println("在调用swap方法之前ds1.a的 值:"+dSwap.a);
swap(dSwap);
System.out.println("在调用swap方法之后ds1.a的 值"+dSwap.a);
}
}
在调用swap方法之前ds1.a的 值:0
在swap方法中ds1.a的值:6
在调用swap方法之后ds1.a的 值6
DataSwap dSwap=new DataSwap();
把new DataSwap()
存到了堆内存中,假设地址是BE2500.dSwap
是引用对象,它存到栈中,假设地址是AD9500
,此时值就是new DataSwap()
对象在堆中的地址BE2500- 调用
swap方法
,先将dSwap这个引用对象保存到栈中,假设地址是AD9600,它存的值是来源于实参dSwap,也就是dSwap在栈中存的值BE2500,这个值实际上就是之前new DataSwap()
对象在堆内存中的地址。
- 到第三步的时候,实际上dSwap、ds1)其实都是指向同一个对象,这个对象就是在堆内存中地址是BE2500保存的对象。
- dSwap、ds1 是引用对象,存的是对象实际在堆中的地址。
- 堆是对象实际存储的地方.
方法的参数传递
1.如果方法的参数是基本数据类型,那么实参(实际的数据)向形参传递参数时,就是直接传递值。把实参的值复制
给形参。
2.如果方法的形参是对象,那么实参(实际的参数),向形参传递参数的时候,也是把值给形参。这个值是实参在栈内存中的值
,也就是引用对象在堆内存中的地址,
基本数据类型都是保存在栈内存中
引用对象
在栈内存中保存的是引用对象的地址
方法的参数传递是传递值(是变量在栈内存中的值
)