Java 为什么我的阵列SC与SN相同?
//当我这样做时,我只想更改序列号Java 为什么我的阵列SC与SN相同?,java,arrays,Java,Arrays,//当我这样做时,我只想更改序列号 //但在我的例子中,SN=SC如果您不想更改原始阵列,则必须创建一个防御副本,并处理该副本,例如: 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 = tranz
//但在我的例子中,SN=SC如果您不想更改原始阵列,则必须创建一个防御副本,并处理该副本,例如:
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);
请参阅这篇文章,它详细解释了如何在Java中传递方法参数。在Java中,数组是对象,当您分配
int[]
变量或将其作为参数传递时,实际上是分配或传递对数组对象的引用
因此,在这次呼吁中:
public static int[] tranzitie(int[] stare, int x, int y) {
int[] copy = stare.clone();
copy[x] = y;
return copy;
}
tranzitie
获取对SC
数组的引用,而不是它的副本。stare
参数将引用同一数组。因此,当方法说
SN = tranzitie(SC, x, y);
它实际上修改了SC
——不是SC的副本,而是实际数组本身
当方法说返回stare
时,由于stare
是对SC数组对象的引用,因此该方法将返回该引用。然后您将SN
分配给它。结果将是SN
和SC
现在是对同一数组的引用。您先前创建的阵列:
stare[x] = y;
将不再可访问(除非您将引用存储在其他位置)
如果这不是您想要的,那么您必须小心处理阵列;中的
CopyOf
和CopyOfRange
方法有助于复制数组或数组的一部分 我不知道你在问什么。两个数组具有相同的元素值。有什么问题吗?是的,但是在我做SN=tranzitie(SC,2,3)之后;(例如)SN将变成{3,1,3,1},我希望SC保持{3,1,1,1},但如果我执行int[]copy=(int[])stare.clone();,它与SNits correct相同;?不必使用(int[])
强制转换,我给出的示例应该可以正常工作。它说“无法从对象转换为int[]”
int[] SN = {3,1,1,1};