java - 克隆多维数组

标签 java

int[][] array = new int[][] {...}
int[][] clone = array.clone();

我天真地期望这会起作用。但它没有——它只克隆了第一个维度,如果我想要一个真正的克隆,我必须去手动克隆另一个维度。注意:内容已正确复制。但是当我更改 clone[0][1] 时,它反射(reflect)在 array[0][1]

虽然众所周知 .clone() 可以执行浅克隆,但 int[][] 看起来像一个单独的对象(如果我们不知道它的内部实现,至少)

为什么选择这种行为? int[][] 引用的不是数组对象,而不仅仅是数组的第一维吗?在什么情况下仅克隆所需行为的第一个维度?

最佳答案

Why is that behaviour chosen?

一致性,最有可能。

正如您所说,int[][] 引用了一个数组对象。恰好每个数组元素的内容是另一个数组,但这只是一个细节。 Java 以相同方式克隆所有数组,并且由于元素可以是任何类型,因此无法保证执行深层复制。

因此 clone() 对数组执行浅拷贝,因此仅克隆第一个维度。

(一般来说,对于克隆是否意味着深拷贝或浅拷贝的问题,似乎没有单一的“最佳”或“明显”答案。开发人员想要什么将取决于每个字段如何被使用应用程序,因此一刀切的方法自然会有局限性。)

关于java - 克隆多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16186141/

相关文章:

Java JTable 转到行错误

java - 如何在 Spring MVC 中将控制重定向到另一个文件夹?

java - 扫描器 nextLine() NoSuchElementException

java - 从Java列表中选择多个随机元素

java神秘的类路径行为

java - 运行 HQL 时发生类转换异常

java - 对于不同的 java 版本,写入和读取 png 图像必须相同

java - 在 Spring Security 中使用个人资料名称或电子邮件登录

java - 为什么下面的代码会出现 classcast 异常?

java - 无法使用 SAX 从 URL 解析 XML 文件?