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中的对象.对象的引用按值传递.
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是"传递引用"吗?
Java是按值传递的.此引用将通过复制的值传递.它仍将指向原始数组.
int[] arrayToPass
Run Code Online (Sandbox Code Playgroud)