数组赋值的一个小问题

如果我想调用一个赋值方法给数组a赋值,怎么才能实现数组b赋值给数组a后,数组a指向数组b的地址而不是像图中这样仍然指向数组a本身的地址呢

img

public static void main(String[] args) {
        int []a = {1,2,3,4};
        int []b = {4,5,6,7};
        System.out.println("先查看数组a和b的内存地址:"+ a +" "+b);
        //你之前的方法,数组是不能直接a=b这种方式赋值的,可以用swap2方法那样赋值,
        // 但是先改变内存地址是不行的,因为在int的时候就开辟了内存地址
        swap(a,b);//值和地址都没变
        System.out.println("查看swap方法后数组a和b的内存地址:"+a+" "+b);
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+"   ");
        }
        System.out.println();
        swap2(a,b);//值变了但地址没变
        System.out.println("查看swap2方法后数组a和b的内存地址:"+a+" "+b);
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+"   ");
        }
        System.out.println();
        System.out.println("想要赋值并改变内存地址必须在int的时候直接赋值");
        int [] c =a;
        System.out.println("int [] c =a:"+c);
        for(int i=0;i<c.length;i++){
            System.out.print(c[i]+"   ");
        }
        System.out.println();
        int [] d =b;
        System.out.println("int [] d =a:"+d);
        for(int i=0;i<d.length;i++){
            System.out.print(d[i]+"   ");
        }
    }
    public static void swap(int[] a, int[] b){
        a = b;
    }
    public static void swap2(int[] a, int[] b){
        for(int i=0;i<a.length;i++){
            a[i]=b[i];
        }
    }

img

a = swap(a, b);
private static int[] swap(int[] a, int[] b) {
    a = b;
    return a;
}

你的a,b都是局部变量,用swap赋值之后没有返回,所以a,b还是原来的样子。


public static void swap(int[] a,int[] b){
        for(int i=0;i<a.length;i++){
            a[i] = b[i];
        }
    }