将int数组复制到数组

时间:2013-05-02 10:39:18

标签: java arrays

我有一个像这样初始化的简单int数组:

 int [][] tempArray=bp.getArray();//get array from other class(bp)
 //doing things with tempArray...

当我更改tempArray时,它也会更改bp.getArray();。 这是因为它引用了bp.getArray();

2 个答案:

答案 0 :(得分:4)

是的,如果你想要一个新的参考,这很容易,你必须使用Arrays.copyOf。其他功能包括Array.cloneSystem.arrayCopy

Arrays.copyOf// is a Java 6 feature. For older versions switch to System.arrayCopy.

    public static int[][] deepCopy(int[][] original) {
        if (original == null) {
              return null;
        }

        final int[][] result = new int[original.length][];
        for (int i = 0; i < original.length; i++) {
            result[i] = Arrays.copyOf(original[i], original[i].length);
        }
        return result;
    }

这将深度复制二维数组。

答案 1 :(得分:-1)

正确的答案是,您需要一份深层副本。您被分配了引用(指针),而不是分配值。

Arrays.copyOf()或System.arraycopy()将起作用 - 但仅限于int []的底层。

在int [] []级别,如果你运行一个副本,你将获得一个指向相同底层数组的单独的顶级数组;不适当的深层复制。

要正确地进行(2级):

public int[][] copy2Deep (int[][] src) {
    int[][] dest = new int[ src.length][];
    for (int i = 0; i < src.length; i++) {
        dest[i] = Arrays.copyOf( src[i], src[i].length);
    }
    return dest;
}

这应该有效 - 基本原则是int[][]实际上是int[]的一维数组,并添加了一些语法糖。

因此,创建数组时不需要知道底部维度(最初将填充'null'子数组),并且src.length可用于返回顶部的长度尺寸。

另见: Efficient System.arraycopy on multidimensional arrays

希望这有帮助。