对于md数组,newarray = oldarray.clone()究竟出了什么问题?

时间:2014-10-19 17:07:49

标签: java arrays

在java中搜索复制多维数组操作后,我发现了这个问题:copy a 2d array in java并且一个downvoted答案建议使用标题中的方法。所以我的问题是:

1 )为什么不好? (因为它看起来很快而且显而易见)

2 )是最好的方式System.arraycopy每行?

1 个答案:

答案 0 :(得分:1)

从根本上说,数组是一个对象。如果你有一个多维数组并且你克隆它,你就不会得到内部数组的副本(因为它们也是数组Object(s))。您可以使用Arrays.copyOf(T[],int)。来自链接的Javadoc,

  

复制指定的数组,使用空值截断或填充(如有必要),以使副本具有指定的长度。对于在原始数组和副本中都有效的所有索引,这两个数组将包含相同的值。对于在副本中有效但不在原始副本中的任何索引,副本将包含null。当且仅当指定的长度大于原始数组的长度时,这些索引才会存在。生成的数组与原始数组完全相同。

修改

以上内容类似于System.arraycopy(),但创建shallow copies。如果需要创建多维数组的deep copies,则必须遍历数组克隆并为每一行创建一个深层副本。