小编典典

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

java

我还研究了其他一些主题和网站,它们似乎都提出了比答案更多的问题。

Josh Bloch谈设计 -讨论文章.clone();

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

当我克隆二维数组时:

values = Map.mapValues.clone();

我仍然不能安全地修改的内容,values因为它仍然可以修改的内容Map.mapValues

实际上,有没有一种方法比我每次都从头开始重新创建一个数组更有效?

谢谢


阅读 217

收藏
2020-11-26

共1个答案

小编典典

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

解决此问题的一种方法是也克隆基础的一维数组:

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