当我将一个数组作为参数传递给函数时,原始数组会被更改,但是数组不应该更改正确吗?如果我错了,请纠正我。
下面我传递了一个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;
}
}
答案 0 :(得分:2)
你错了。您传入的内容不在于数组 - 它是数组的引用。数组是Java中的引用类型,因此a1
(例如)的值不是数组对象 - 它是对数组对象的引用。
当您将该引用传递给fix
时,参数(a3
)与a1
具有相同的值...该值引用相同的数组,因此对该引用进行了修改方法返回后,数组可见。此时,a1
和a2
将是相同的引用 - 它们都引用相同的数组。
答案 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