克隆多维数组

Boz*_*zho 17 java

int[][] array = new int[][] {...}
int[][] clone = array.clone();
Run Code Online (Sandbox Code Playgroud)

我天真地期待这个工作.但它没有 - 它只克隆了第一个维度,如果我想要一个真正的克隆,我必须手动克隆另一个维度.注意:内容已正确复制.但是,当我改变时clone[0][1],它反映在array[0][1]

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

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

And*_*yle 8

为什么选择这种行为?

一致性,最有可能.

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

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

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