需要澄清将Array传递给方法

时间:2015-01-20 16:34:32

标签: arrays reference

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 个答案:

答案 0 :(得分:1)

1)a=j

使变量a引用任何变量j引用。这意味着,在执行语句之后, aj引用相同的内容。

2)a[0]=j[0]

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

修改

就具体问题而言,在方法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后,没有任何更改。原因是a方法中的变量change_i用作传递给方法的数组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的更多信息。