Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的阵列SC与SN相同?_Java_Arrays - Fatal编程技术网

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};