Java数组复制和2D数组复制混淆

标签 java arrays

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/

相关文章:

javascript - 新的 Array(9) 语法的目的是什么?

java - 重构方法头参数顺序

java - Spring Dispatcher-servlet.xml 配置

java - 在java应用程序中嵌入 Jersey

java - hibernate 分布式二级缓存选项

java - 构建类似于 httpbuilder 的异步 httpbuilder

c - 声明指向从结构定义中接受结构的函数的指针?

javascript - jQuery - 查找和删除 div 的多个属性

Java:在不指定数组大小的情况下声明多维数组(例如,new int[10][])

ruby - 与 `Array#include?` 相比, `Array#index` 的用途是什么?