为什么最后的输出结果还是1234,?

为什么最后的输出结果还是1234,?



public class Math {
    public static void main(String[] args) {
        int[] arr ={1,2,3,4};
      tet.test(arr);
        for (int i = 0; i < arr.length; i++) {

            System.out.println(arr[i]);
        }

    }


}

class tet{
    static void test(int[] arr ){
        arr=new int[]{7,8,9,10};

    }
}

参考GPT和自己的思路:因为在调用 test 方法时,引用变量 arr 的值被赋值为一个新的数组 {7, 8, 9, 10},但这个值只在 test 方法中有效,不会改变 main 方法中的原数组。因此,当 main 方法中的循环输出数组时,仍然输出原始的数组 {1, 2, 3, 4}

函数里改变不了传入外部变了arr的地址的。你改的只是函数内的arr地址

你如果希望修改数组中的内容,不能修改数组变量本身,可以采用如下的方式:


        public static void main(String[] args) {
            int[] arr ={1,2,3,4};
            tet.test(arr);
            for (int i = 0; i < arr.length; i++) {

                System.out.println(arr[i]);
            }

        }

    static class tet{
       public static void test(int[] arr ){
//            arr=new int[]{7,8,9,10};
           arr[0] = 7;
           arr[1] = 8;
           arr[2] = 9;
           arr[3] = 10;
        }
    }

要改变指针,需要一个对象包裹:

public class Math {
    public static void main(String[] args) {
        A a = new A(); a.arr ={1,2,3,4};
      tet.test(a);
        for (int i = 0; i < a.arr.length; i++) {
 
            System.out.println(a.arr[i]);
        }
 
    }
 
 
}
 class A { public int[] arr; }
class tet{
    static void test(A a){
        a.arr=new int[]{7,8,9,10};
 
    }
}