在将数组传递给方法时需要澄清

Need clarification in passing an Array to a method

public class ABC {

    public static void main(String args[]) {
        int i[] = {1};
        change_i(i);
        System.out.println(i[0]);   //prints 1
    }
    public static void change_i(int a[]) {
        int j[]={3};
        a=j;
    }
}

public class ABC {

    public static void main(String args[]) {
        int i[] = {1};
        change_i(i);
        System.out.println(i[0]);   //prints 3
    }
    public static void change_i(int a[]) {
        int j[]={3};
        a[0]=j[0];
    }
}

这两个赋值 a=j;a[0]=j[0]; 实际上有什么区别 为什么输出不同?

1) a=j

使变量 a 引用任何变量 j 引用的内容。意思是,语句执行后,aj引用相同的东西。

2) a[0]=j[0]

使数组 a 的第一个元素(在索引 0 处)的值具有数组 j 的第一个元素的值。意思是,语句执行后,aj的第一个元素引用相同的东西

编辑

就您的问题而言,在方法 change_i 中,每个语句都会发生以下情况:

1)

public static void change_i(int a[]) {  // pass the array a by value
    int j[]={3};                        // create a new array of integers with size 1 that holds the number 3 as its only element
    a=j;                                // make this passed copy value of array a now point to j
}

Java 按值传递所有内容 (Look here for detail),因此在执行方法 change_i 后,没有任何变化。原因是 change_i 方法中的变量 a 用作传递给方法的数组 a 引用 。执行语句 a=j 后,此变量 a 现在引用在方法内部创建的数组 j,但不会影响传入的数组。唯一改变的是 什么a,在changes_i,引用

2)

public static void change_i(int a[]) {  // pass the array a by value
    int j[]={3};                        // create a new array of integers with size 1 that holds the number 3 as its only element
    a[0]=j[0];                          // used the copy value of array a to access the first element of original array a and give it the value of the first element of array j, which is 3
}

这个方法实际上改变了传入的数组。由于这个方法中的变量 a 引用了传入的数组,所以当我们调用 a[0] 时,我们正在使用这个复制的引用访问原始数组的第一个元素,因此 a[0]=j[0] 实际上改变了数组。

您应该阅读有关 how Java passes values into methods 的更多信息。