在 Java 中按引用传递数组
是否可以在Java中将数组作为参数传递,例如?int[5] &result
我想传递对数组的引用,因为我想在调用函数中更改数组。语法是什么?
是否可以在Java中将数组作为参数传递,例如?int[5] &result
我想传递对数组的引用,因为我想在调用函数中更改数组。语法是什么?
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 中的对象。对对象的引用是按值传递的。
在 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);
}
输出:
First Second
First1 Second2
您可以从输出中获得的示例中看到,而不是 。这是因为在函数中,使用了对主引用没有影响的副本。从而说明了这样一个事实,即您无法修改传递的变量,该变量仍将是对同一对象的引用。但是,该函数会带来所需的效果,因为您可以修改引用的对象。First Second
Second First
swap
change
有关更多参考,请参阅:
Java是“逐个引用传递”吗?