public static int[] tranzitie(int[] stare, int x, int y) {
stare[x] = y;
return stare;
}
int[] SC = {3,1,1,1};
int[] SN = {3,1,1,1};
SN = tranzitie(SC, x, y);
//当我这样做时,我想只改变SN //但在我的情况下SN = SC
答案 0 :(得分:1)
如果您不想更改原始数组,则必须制作防御性副本并改为使用该副本,例如:
public static int[] tranzitie(int[] stare, int x, int y) {
int[] copy = stare.clone();
copy[x] = y;
return copy;
}
请参阅此related discussion,其中详细说明了如何在Java中传递方法参数。
答案 1 :(得分:0)
在Java中,数组是对象,当您分配int[]
变量或将其作为参数传递时,实际上是将引用分配或传递给数组对象。 / p>
因此,在这次电话会议中:
SN = tranzitie(SC, x, y);
tranzitie
获取引用到SC
数组,而不是它的副本。 stare
参数将引用相同的数组。因此,当方法说
stare[x] = y;
它实际修改了 SC
---不是SC
的副本,而是实际的数组本身。
当方法显示return stare
时,由于stare
是对SC数组对象的引用,因此该方法将返回该引用。然后为此分配SN
。结果是SN
和SC
现在是对同一数组的引用。您之前创建的数组:
int[] SN = {3,1,1,1};
将不再可访问(除非您将引用存储在其他位置)。
如果这不是您想要的,那么您必须小心处理您的阵列; Arrays
中的CopyOf
和CopyOfRange
方法有助于制作数组或数组部分的副本。