Java里方法的参数传递方式只有一种:值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受到任何影响。
public class PrimitiveTransferTest {
public void swap(int a,int b)
{
int 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);
new PrimitiveTransferTest().swap(a, b);
System.out.println("交换结束后,a的值是"+a+";b的值是"+b);
}
}
运行结果:
swap方法里,a的值是9;b的值是6
交换结束后,a的值是6;b的值是9
程序改变的只是swap()方法栈区的a、b。这就是值传递的实质,当系统开始执行方法时,系统为形参执行初始化,就是把实参变量的值赋给方法的形参变量,方法里操作的并不是实际的实参变量。
class DataWrap
{
int a;
int b;
}
public class ReferenceTransterTest {
public static void swap(DataWrap 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(dw);
System.out.println("交换结束后,a成员变量的值"+dw.a+";b成员变量的值是"+dw.b);
}
}
运行结果
swap方法里,a成员变量的值9;b成员变量的值是6
交换结束后,a成员变量的值9;b成员变量的值是6
main()方法开始创建了DataWrap对象,并定义了一个dw引用变量来指向DataWrap对象,这是一个与基本类型不同的地方。
main()方法中的dw是一个引用,也就是一个指针,它保存了DataWrap对象的地址值,当把dw的值赋给swap()方法的形参后,即让swap()方法的dw形参页保存这个地址值,即也会引用到堆内存中的DataWrap对象。