使用.clone()复制2D数组仍然引用原始数据

时间:2011-11-28 17:27:23

标签: java arrays copy clone

好的,我之前已经问过这个问题:Previous Question

我还研究了其他几个主题和网站,他们似乎都创造了更多问题而不是答案。

Josh Bloch on Design - 一篇讨论.clone();

的文章

但我仍然无法解决我的问题。

当我克隆我的2D数组时:

values = Map.mapValues.clone();

我仍然无法安全地修改values的内容,因为它仍会修改Map.mapValues的内容。

实际上有没有办法复制一个比我更有效的数组,每次只是从头开始重新创建一个?

由于

1 个答案:

答案 0 :(得分:7)

在Java中,2D数组是对一维数组的引用数组。 Map.mapValues.clone()仅克隆第一层(即引用),因此最终会得到一个新的相同的底层1D数组的引用数组。这就是您尝试使用clone()无效的原因。

解决这个问题的一种方法是克隆底层的1D数组:

byte[][] values = Map.mapValues.clone();
for (int i = 0; i < values.length; i++) {
  values[i] = values[i].clone();
}