数组的价值" r"更新到2?

时间:2015-06-07 06:02:50

标签: java arrays static static-methods

"为什么r的值会变为2 2而我正在改变,在另一个函数中也是如此?"

class Ideone {// main
    public static void main(String[] args) throws java.lang.Exception {
        int[] r = new int[2];
        for (int i = 0; i < r.length; i++)
            System.out.println(r[i]);
        int[] catch1 = doesThisWork(1, 2, r);
        // the value of r changes!?
        for (int i = 0; i < r.length; i++)
            System.out.println(r[i]);
    }// doesthisWork

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

3 个答案:

答案 0 :(得分:3)

doesThisWork接受对r数组的引用,这意味着它可以更改该数组的内容。在方法返回时为方法内的re变量分配新值时,不会更改r的值(因为Java是按值语言传递),更改引用的对象的状态re(在您的情况下是一个数组)会影响r的状态,因为rre引用同一个对象。

答案 1 :(得分:3)

Java是通过引用的值传递的!

所以当你这样做时

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

您的int[] re指的是int[] r指向的实际数组实例,所做的任何更改都会反映到原始数组中。

答案 2 :(得分:0)

在将int[] r作为doesThisWork(int a, int b, int[] re)的条目时,在此代码中

,请小心,因为java将指针指向r并且如果发生任何更改,则表示指针也必须更改引用(它是通过引用调用)。 为了解决这个问题,请使用tmp数组:

    int[] tmp = re
    for (int i = 0; i < tmp.length; i++) {
        tmp[i] = b;
    }
    return tmp;