好的,我之前已经问过这个问题:Previous Question
我还研究了其他几个主题和网站,他们似乎都创造了更多问题而不是答案。
Josh Bloch on Design - 一篇讨论.clone();
但我仍然无法解决我的问题。
当我克隆我的2D数组时:
values = Map.mapValues.clone();
我仍然无法安全地修改values
的内容,因为它仍会修改Map.mapValues
的内容。
实际上有没有办法复制一个比我更有效的数组,每次只是从头开始重新创建一个?
由于
答案 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();
}