public static void reverseArray(int[] arr) {
int[] reversed = new int[arr.length];
for (int i = arr.length - 1; i > -1; --i) {
reversed[arr.length - i - 1] = arr[i];
}
arr = reversed;
}
这里我有一个反向数组方法。如果我打电话
int[] v = new int[] {1, 2, 3, 4};
reverseArray(v);
//print v
我会得到“1 2 3 4”
但是如果我将reverseArray函数更改为
public static void reverseArray(int[] arr) {
int[] reversed = new int[arr.length];
for (int i = arr.length - 1; i > -1; --i) {
reversed[arr.length - i - 1] = arr[i];
}
for (int i = 0; i < arr.length; ++i) {
arr[i] = reversed[i];
}
}
它将按预期工作并打印出“4 3 2 1”为什么没有“arr = returned;”工作?它们都是指针,因此如果我将一个指针分配给另一个指针,它应该指向相同的对象,就像二维数组一样。如果我这样做
int[][] mat = //some assignment
public void reverseMatrix() {
reverseAllRows();
int[][] c = new int[mat.length][mat[0].length];
for (int i = 0; i < mat.length; ++i) {
c[mat.length - 1 - i] = mat[i];
}
mat = c; //This works for some reason
}
它不需要我复制每个元素就可以工作。为什么会这样?我怎么知道什么时候应该使用 equals,什么时候不应该使用 equals?
最佳答案
您要做的就是返回数组:
public static int[] reverseArray(int[] arr)
{
int[] reversed = new int[arr.length];
for (int i = arr.length - 1; i > -1; --i)
{
reversed[arr.length - i - 1] = arr[i];
}
return reversed;
}
然后你将调用该函数:
int[] v = new int[] {1, 2, 3, 4};
v = reverseArray(v);
//print v
关于Java数组复制和2D数组复制混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36073632/