值传递的实质:当系统开始执行方法时,系统为形参执行初始化,就是把实参变量的值传递赋给形参变量(复制),方法里操作的并不是实际的实参变量。
一、基本数据类型
public class PrimitiveTransferTest{
public static vpid swap(int a, int b){
int temp;
temp = a;
a = b;
b = temp;
System.out.println("swap方法里,a的值是" + a + ";b的值是" + b);
}
public static void main(String[] args){
int a = 6;
int b = 9;
swap(a,b);
System.out.println("交换结束后,a的值是" + a + ";b的值是" + b);
}
}
swap方法里,a的值是9;b的值是6
交换结束后,a的值是6;b的值是9
二、引用数据类型
public class ReferenceTransferTest{
public static vpid swap(DataSwap dw){
int temp = dw.a;
dw.a = dw.b;
dw.b = temp;
System.out.println("swap方法里,a成员变量的值是" + dw.a + ";b成员变量的值是" + dw.b);
}
public static void main(String[] args){
DataWrap dw = new DataWrap;
dw.a = 6;
dw.b = 9;
swap(a,b);
System.out.println("交换结束后,a成员变量的值是" + dw.a + ";b成员变量的值是" + dw.b);
}
}
swap方法里,a成员变量的值是9;b成员变量的值是6
交换结束后,a成员变量的值是9;b成员变量的值是6
当形参是引用数据类型的时候,实际操作的是堆内存中的DataWrap对象,main栈区和swap栈区引用的是同一个对象,因此main方法中的值也改变了。