我使用此代码交换2-d数组行(A和B):
public static void swapRows(int[][] array, int[] rowA, int[] rowB) {
int[] tempRow;
tempRow = rowA;
rowA = rowB;
rowB = tempRow;
}
但是在调用此方法并显示数组后,它根本没有改变!
为什么?
答案 0 :(得分:4)
这是因为你交换了引用值,这些引用是按值传递的(我知道,这听起来很混乱,但这就是Java所做的)。当你做这个作业
rowA = rowB;
更改的效果在您的功能中可见,而不是在其外部。为了使调用者可以看到效果,您需要对array
对象进行操作。
以下是:首先,更改API以获取索引而不是实际行。然后更改代码以将这些索引用于2D数组,如下所示:
public static void swapRows(int[][] array, int rowA, int rowB) {
int[] tempRow = array[rowA];
array[rowA] = array[rowB];
array[rowB] = tempRow;
}