2010-01-13 回答
就是引用对象传参,传到函数里边你在函数里修改它,实参也会变
比如数组是引用对象吧
void foo(int[] a)有这么一个函数,你在函数体里a[0] = 3;
然后其他地方调用foo
int[] a = new int[]{1,2,3,4};
foo(a);
// 到这里结果a[0]就变成3了
你例子里的x和harry你可以看作是一个指代,它们两指向同一快内存,在函数里x修改了它指向的地方,也就相当于harry指向的地方被修改了
下面->表示指向,比如a->xxx,a指向xxx这块内存
a -> Employee(A)
b -> Employee(B)
传参到swap里
a = x -> Employee(A)
b = y -> Employee(B)
swap结束时
b = x -> Employee(B)
a = y -> Employee(A)
也就是说,swap只是交换x和y的引用,它们两引用的对象被交换了,然后x和y是swap内部的局部变量,函数结束就over了
对调用者传入的a和b没有实质上的改变
追问:
关于java方法的参数中,是只调用还有对象调用还有一个例子,确实不太明白:
public static void swap(Employee x,Employee y)
{
Employee temp = x;
x = y;
y = temp;
}
用以下进行调用:
Employee a = new Employee();
Employee b= new Employee();
swap(a,b);
书上的解释是:如果采用的是引用调用的话,这个程序应该可以执行,但是方法并没有改变储存在a和b中的对象引用(为什么?),swap方法的参数x,y被初始化两个对象引用的拷贝,这个方法交换的是两个拷贝(这个我当然理解,然后呢?),方法结束后,x,y被丢弃了,a,b仍然引用方法调用之前所引用的对象,(为什么?为什么?)我确实没有看懂?请教各位啦...