假设有一个对象数组int[] a = {1,2},要做到交换a[0]和a[1],编写如下方法:
public static void swap(int n1 , int n2){
int temp = n1;
n1=n2;
n2=temp;}
为什么达不到交换的目的?既然数组相当于对象的引用,那a[0]和a[1]应该分别存放数1,2的地址,假设为x,y,那如上面编写的方法不是交换了地址吗?为什么还达不到交换的作用?
呵呵。因为你传递的参数是数组里的元素,应该传数组的。
你的SWAP方法里的所有变量生存周期在离开该方法时已经失效。而你又没有将交换后的值赋给数组。所以才会无效。上图,亲测有效!
追问可是理论上a[0]和a[1]应该是两个地址的值,比如什么A00001之类的,那我把他们地址交换了不是就相当于他们指向的地址交换了,不是应该可以达到目的么?
再有,按你所说的话我把对象数组放进去,离开该方法的时候不是也就失效了?
第一个问题:
a[0]和a[1]作为参数传进去不能看成地址了,相当于new了两个独立的对象,在跳出局部方法后。不起作用了。
第二个问题:
对象数组因为初始化在局部方法之上。所以生存周期在跳出方法后依然有效。
a[0]和a[1]作为对象传进去,是不是就是跟传int a = 1这样的类型传进去一样了?
追答嗯,可以这样理解