以下改变参数chr并最终匹配“交换的”2D阵列。我无法看到它是如何改变的,因为它不在任何计算的接收端。 调用此方法的方法也有类似的变量,也以类似的方式更改。
private Character[][] moveLeft(Character[][] chr) {
Character[][] swapped = chr;
int[] pos = getBlankLocation(chr); //find the blank space
//location of blank space in 2d array
int row = pos[0];
int col = pos[1];
if (col != 0) {
Character temp = chr[row][col - 1];
swapped[row][col - 1] = chr[row][col];
swapped[row][col] = temp;
return swappedChr;
}
return null;
}
答案 0 :(得分:1)
您使swapped
和chr
引用内存中的同一对象。因此,更改另一个将更改另一个,因为它们都引用相同的对象。请注意,对于像int
这样的原始值,情况并非如此。
如果您要在swapped
中交换值而chr
没有效果,则需要复制或复制chr
。您可以使用嵌套的for循环复制值,也可以使用其中一种辅助方法。
答案 1 :(得分:1)
这是预期的。 Java是按值传递的,但传递给方法的值是Array对象的内存地址。因此,任务:
Character[][] swapped = chr;
实际上并没有创建新数组。