数组交换无效,而数组元素交换却有效,实在是弄不明白……
值传递的说法根本行不通啊
public class Test { public void changeArray(int[] a,int[] b){
int[] tmp = a;
a = b;
b = tmp;
}

public void changeElement(int[] a,int[] b){
int tmp = a[0];
a[0] = b[0];
b[0] = tmp;
} public static void main(String[] args) throws Exception {
int[] a = new int[1];
int[] b = new int[1];
Test t = new Test();

a[0] = 0;
b[0] = 1;
t.changeArray(a, b);
System.out.println(a[0]+" "+b[0]);

a[0] = 0;
b[0] = 1;
t.changeElement(a, b);
System.out.println(a[0]+" "+b[0]);

}
}
打印结果:0 1
1 0

解决方案 »

  1.   

    这里的b 和外面的b不是同一个变量 只不过初期是传递了同一个地址而已 也就是说 地址所指向的值发生改变的话 外部会一起改变 但你这里是把内部的地址改变了 也就是说 两个b已经不是指向同一个地址了 所以出来的值肯定是不一样
    public void changeArray(int[] a,int[] b){
         //传递了b的地址进来(局部变量)
            int[] tmp = a;
            a = b;
            //对局部b重新赋值 也就是说 把a的地址给局部变量b (外面的b没影响 注意这点 只是对内部的重新赋值而已)
            b = tmp;
            
            
        }