Java int [] []数组对象

时间:2012-03-13 13:34:19

标签: java arrays reference multidimensional-array

我已经定义了一个int[][]对象。因为它是一个对象,如果我将它作为参数发送给方法,它只会发送它的引用,所以对方法中数组的任何更改都会影响它在主程序中的作用。所以我想在方法中复制这个对象,但我不知道如何实现这个目标。

我在考虑这样的事情:

private void myMethod( int[][] array )
{
    //Define our temporary array (clone)
    int[][] newArray = new int[3][3];

    //Go through the elements of the array
    for .... row = 0; row < ..; row++
        for ..... col = 0; col < ..; col++
           //Copy individual elements from one array to another
           newArray[row][col] = array[row][col];
}

但是上面的代码会将数组中的每个元素复制到newArray中作为值(所以...是项目的克隆),还是只是引用?

如果是这样,如何实现这一目标。如果我使用ArrayLists而不是int[][]个对象,那么就有clone()方法或类似的东西,但我还没有int[][]个对象的方法:(

另外,如果我在方法newArray = array中执行此操作时没有弄错,那么它将再次仅复制引用,因此两者都将指向相同的int[][]对象:(< / p>

P.S。我知道我可以测试一下,但我想和你们讨论一下,看看到底是什么。

4 个答案:

答案 0 :(得分:2)

  

但是上面的代码会将数组中的每个元素复制到newArray中作为值(所以...是项目的克隆),还是只是引用?

您正在复制数组的每个元素,而每个元素都是int,所以您没问题。新阵列将完全独立于原始阵列。

请注意,如果您已完成:

int[][] newArray = new int[3][];
for (int i = 0; i < 3; i++) {
    newArray[i] = array[i];
}

...然后 只会将对三个现有int[]数组的引用复制到newArray。但是你已经分配了一组全新的数组(一个int[][]和3个int[]),所以它们都是独立的。

答案 1 :(得分:1)

原始类型(例如int)不是引用类型。因此,遍历所有项目并逐个复制它们将进行按值复制。

简而言之,您的代码是正确的。

答案 2 :(得分:1)

int是一种基本类型,你总是将它们作为值传递,而不是作为引用,所以你的代码确实会创建一个新的数组副本。

你可能想要考虑使用Arrays.copyOf(),它可能会更快。

答案 3 :(得分:1)

您可以在矩阵上使用clone(),并在矩阵中与行对应的每个数组上使用int[][] matrix = new int[3][3]; // ... matrix gets filled ... int[][] copy = matrix.clone(); for (int i = 0; i < matrix.length; i++) copy[i] = matrix[i].clone(); ,它可以正常工作,因为您正在克隆原始值矩阵,如下所示:

copy

以上内容将创建一个独立于matrix的{​​{1}}矩阵,这意味着您可以更改副本的值而不会影响原始值。