gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:11:56 24 4
gpt4 key购买 nike

我首先克隆了 1D 原始数组(它将包含包装器),然后更改了克隆数组的第一个值。但是原始数组的第一个值没有改变。然后我克隆了一个二维数组并做了同样的事情。(改变了数组[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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com