【发布时间】:2020-04-25 16:42:18
【问题描述】:
我是 Java 新手。我有一个方法应该返回一个新的修改数组。但是在执行代码之后,作为参数的数组也发生了变化。请解释我在哪里修改原始数组。如何解决这个问题?我很绝望,因为我不明白我在哪里传递链接而不是值。
import java.util.Arrays;
public class question {
public static void main(String[] args) {
final int[][] inputArray = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
System.out.println("Original array:");
System.out.println(Arrays.deepToString(inputArray));
//Display
//[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
System.out.println("Array after delete line:");
System.out.println(Arrays.deepToString((removeLine(1, inputArray))));
//Display - ok
//[[1, 2, 3], [7, 8, 9], [0, 0, 0]]
System.out.println("The original array after using in method:");
System.out.println(Arrays.deepToString(inputArray));
//Display
//[[1, 2, 3], [4, 5, 6], [0, 0, 0]]
//I don't understand this.
}
static int[][] removeLine(int k, int[][] inpArray) {
//I copy in resultArray to keep unchanged inpArray.
int[][] resultArray = new int[inpArray.length][inpArray[0].length];
System.arraycopy(inpArray, 0, resultArray, 0, inpArray.length);
//I change resultArray.
for (int i = k; i < resultArray.length - 1; i++) {
resultArray[i] = Arrays.copyOf(resultArray[i + 1], resultArray[i + 1].length);
}
Arrays.fill(resultArray[resultArray.length - 1], 0);
//I return resultArray.
return resultArray;
}
}
【问题讨论】:
-
这不是深拷贝!
标签: java methods parameters