java中关于数组引用的问题

假设有一个对象数组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这样的类型传进去一样了?

追答

嗯,可以这样理解

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-18
public static void swap(int[] a, int n1 , int n2){
int temp = a[n1];

a[n1]=a[n2];

a[n1]=temp;
}
按你那样,只是交换了局部变量的值,但不会传递到另外的方法里。
相似回答