在java中通过引用传递数组

mar*_*yam 14 java arrays reference

可以像这样在java中传递一个数组作为参数int[5] &result吗?我想传递对数组的引用,因为我想在调用函数中更改数组.语法是什么?

JB *_*zet 34

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您愿意,您可以认为它应该通过引用传递,但这不是 Java 设计者的想法,也不是 Java 的工作方式。当您将数组传递给方法时,您实际上是在传递对该数组的引用的副本。调用方法可以使用引用来更改数组的内容,但如果为引用分配不同的数组,则调用者不会受到影响,并且 callig 方法中的原始引用仍将指向原始数组。 (4认同)
  • 但是你需要在通过引用传递数组之前先创建数组的元素(即,你不能传递空数组) (3认同)
  • 对对象的引用是按值传递的。你这是什么意思?它应该通过引用而不是通过值传递 (2认同)

ban*_*ane 18

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

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);
}
Run Code Online (Sandbox Code Playgroud)

输出:

First Second
First1 Second2
Run Code Online (Sandbox Code Playgroud)

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

有关更多参考,请参阅:
Java是"传递引用"吗?

  • *“当您传递它时,您可以更改`arr`所指向的数组,但是不能更改`arr`所指向的数组。” *很正确,但是可能更清楚(对于那些对此感到困惑的人东西)。 (2认同)

RNJ*_*RNJ 5

Java是按值传递的.此引用将通过复制的值传递.它仍将指向原始数组.

int[] arrayToPass
Run Code Online (Sandbox Code Playgroud)

  • 如何从`int`切换到`Integer`解决了什么问题? (7认同)