public static void swap(Integer a, Integer b)
{
int temp = a.intValue();
// a = new Integer(b.intValue());
a = b;
// b = new Integer(temp);
b = temp;
}
这个函数之所以不能交换值是因为Integer会自动装箱和拆箱成int类型的,而它是基本类型的对象,基本类型对象在进行函数参数传递时是以值传递的,也就是说在调用swap(Integer , Integer)这个函数时,实参a 和b 分别复制了一个值给函数swap(Integer , Integer)的形参,所以不管a 和b 的值在函数内部如何改变,都没有改变实参的值。
public static void swap(myInt a, myInt b)
{
int temp = a.x;
a.x = b.x;
b.x = temp;
}
这个函数能交换是因为它的参数是类类型的对象,而类类型的对象在进行参数传递时是以地址传递的,而myInt 是一个类类型的对象,调用swap(myInt a, myInt b)后,a 和b 指向的地址中的值已发生了改变,所以这个函数能交换实参的值。
|