在 Java 中按引用传递数组

2022-09-02 11:12:56

是否可以在Java中将数组作为参数传递,例如?int[5] &result

我想传递对数组的引用,因为我想在调用函数中更改数组。语法是什么?


答案 1
private void demo() {
    int[] array = new int[5];
    System.out.println(Arrays.toString(array)); // 0, 0, 0, 0, 0
    fillArray(array);
    System.out.println(Arrays.toString(array)); // 0, 1, 2, 3, 4
}

private void fillArray(int[] array) {
    for (int i = 0; i < array.length; i++) {
        array[i] = i;
    }
}

数组是 Java 中的对象。对对象的引用是按值传递的。


答案 2

在 Java 中,数组按值传递,但值是对数组的引用。假设您有一个数组 。传递它时,可以更改引用的数组,但不能更改引用的数组;即,在方法内部,您可以修改引用的对象,但不能修改传递的变量,该变量仍将是对同一对象的引用。我将尝试用一个例子来说明:arrarrarr

public static void swap(StringBuffer a, StringBuffer b)
{
    StringBuffer t = a;
    a = b;
    b = t;
}

public static void change(StringBuffer a, StringBuffer b)
{
    a = a.append("1");
    b = b.append("2");
}

public static void main(String[] args)
{
    StringBuffer a = new StringBuffer("First");
    StringBuffer b = new StringBuffer("Second");
    swap(a, b);
    System.out.println(a + " " + b);
    change(a, b);
    System.out.println(a + " " + b);
}

输出:

First Second
First1 Second2

您可以从输出中获得的示例中看到,而不是 。这是因为在函数中,使用了对主引用没有影响的副本。从而说明了这样一个事实,即您无法修改传递的变量,该变量仍将是对同一对象的引用。但是,该函数会带来所需的效果,因为您可以修改引用的对象First SecondSecond Firstswapchange

有关更多参考,请参阅:
Java是“逐个引用传递”吗?