我还研究了其他一些主题和网站,它们似乎都提出了比答案更多的问题。
Josh Bloch谈设计 -讨论文章.clone();
.clone();
但是我仍然无法解决我的问题。
当我克隆二维数组时:
values = Map.mapValues.clone();
我仍然不能安全地修改的内容,values因为它仍然可以修改的内容Map.mapValues。
values
Map.mapValues
实际上,有没有一种方法比我每次都从头开始重新创建一个数组更有效?
谢谢
在Java中,2D数组是对1D数组的引用的数组。Map.mapValues.clone()仅克隆第一层(即引用),因此最终获得了 对相同底层1D数组 的新引用 数组 。这就是为什么您尝试使用clone()无效的原因。
Map.mapValues.clone()
clone()
解决此问题的一种方法是也克隆基础的一维数组:
byte[][] values = Map.mapValues.clone(); for (int i = 0; i < values.length; i++) { values[i] = values[i].clone(); }