java - 克隆一维数组和二维数组时发生什么不同

标签 java arrays clone

我首先克隆了一维原始数组(它将保存包装器),然后更改克隆数组的第一个值。但原始数组的第一个值没有改变。然后我克隆了一个二维数组并做了同样的事情。(更改了数组[0][0]值)。原始数组[0][0]处的值也被更改了。为什么会发生这种情况。这是浅拷贝和深拷贝的原因吗?

我的一维数组示例

    int[] arr=new int[2];
    arr[0]=1;
    arr[1]=2;

    int[]arrnew=arr.clone();
    System.out.println(arr[0]);
    System.out.println(arrnew[0]);
    arr[0]=5;
    System.out.println(arr[0]);
    System.out.println(arrnew[0]);

我的二维数组示例

        int[][] arr=new int[2][2];
        arr[0][0]=1;
        arr[0][1]=2;
        arr[1][0]=3;
        arr[1][1]=4;
        int[][] arrnew=arr.clone();
        System.out.println(arr[1][0]);
        System.out.println(arrnew[1][0]);
        arr[1][0]=5;
        System.out.println(arr[1][0]);
        System.out.println(arrnew[1][0]); 

最佳答案

Is this due to shallow copy and deep copy?

是的。 clone() 仅执行浅复制。

clone方法复制第一维的内容。在第一个示例中,数组只有一维并且由整数(这是一种值类型)组成,因此所有整数都会被复制。这仍然是一个浅拷贝。如果您使用数组中的引用类型制作相同的示例,您将看到与多维数组相同的行为。

在第二个示例中,您有一个二维数组,它基本上是一个数组的数组,因此“第一个数组”包含引用。当您克隆多维数组时,将复制对数组的引用,而不是这些数组的内容(因为它不是深层复制)。

关于java - 克隆一维数组和二维数组时发生什么不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20696749/

相关文章:

java - 将项目添加到 fragment 中的 ListView 中

java - 主线程处理广播接收器的概念是什么

arrays - 作业中的 Perl 'context'

javascript - Javascript 中的 PHP 数组?

java - 克隆如何比对象创建具有更高的性能

java - 如何在 Java 中克隆通用列表?

java - 在 set 方法中使用 Scanner.next() 并尝试在数组元素上调用它

java - Optional<T> 的比较器

javascript - 从 for 循环内部向数组添加元素

java - 如何制作对象的深拷贝?