当我们将它作为参数传递给其他函数时,数组的值如何变化?

时间:2015-10-15 04:28:26

标签: java arrays

当我将一个数组作为参数传递给函数时,原始数组会被更改,但是数组不应该更改正确吗?如果我错了,请纠正我。

下面我传递了一个int x = 10作为更改(int a)函数的参数。 原始int x的值发生了变化。

那么相同的代码如何以不同的方式影响数组和int?

public  class Runy  {

public static void main(String [] args) 
{
    Runy p = new Runy();
    p.start();
}

void start() 
{
    long [] a1 = {3,4,5};
    long [] a2 = fix(a1);

    int x=10;
    int y= change(x);

    System.out.println(y);
    System.out.println(x);

    System.out.print(a1[0] + a1[1] + a1[2] + " ");
    System.out.println(a2[0] + a2[1] + a2[2]);

}

long [] fix(long [] a3) 
{
    a3[1] = 7;
    return a3;
}
int change(int a)
{
    a=a+1;
    return a;
}

}

2 个答案:

答案 0 :(得分:2)

你错了。您传入的内容不在于数组 - 它是数组的引用。数组是Java中的引用类型,因此a1(例如)的值不是数组对象 - 它是对数组对象的引用。

当您将该引用传递给fix时,参数(a3)与a1具有相同的值...该值引用相同的数组,因此对该引用进行了修改方法返回后,数组可见。此时,a1a2将是相同的引用 - 它们都引用相同的数组。

答案 1 :(得分:0)

正如Jon所提到的,您传递的是对数组的引用而不是新数组。如果您不希望修改旧数组,请使用Arrays.copyOf,如下所示:

public class Runy {

    public static void main(String[] args) {
        Runy p = new Runy();
        p.start();
    }

    void start() {
        long[] a1 = {3, 4, 5};
        long[] a2 = fix(Arrays.copyOf(a1, a1.length));

        System.out.println(a1[0] + ", " + a1[1] + ", " + a1[2]);
        System.out.println(a2[0] + ", " + a2[1] + ", " + a2[2]);

    }

    long[] fix(long[] a3) {
        a3[1] = 7;
        return a3;
    }
}

您也可以在System.arraycopy()上阅读。以下两种方法之间存在差异:System.arraycopy() vs. Arrays.copyOf() in Java