【发布时间】:2019-04-08 21:52:14
【问题描述】:
我有深度复制方块的功能:
public Square[][] copy_array(Square[][] board) {
Square[][] nv = new Square[8][8];
for (int i = 0; i < nv.length; i++)
nv[i] = Arrays.copyOf(board[i], board[i].length);
return nv;
}
当我使用此函数并对nv 进行更改时,它会更改我传入的原始board[][] square。我读到Arrays.copyOf 返回一个克隆数组,该数组不受原始更改的影响。但这不起作用,如上面的示例。源数组中的内存引用只是指向新位置:Does Arrays.copyOf produce a shallow or a deep copy?
什么是进行真正深拷贝的最佳方法,以便对nv 中的对象的更改不会更改board 中的对象?
【问题讨论】:
-
那是javascript,arathorn之子,我需要java!
-
哦,我今天早上的咖啡呢,哈哈
-
如果您需要每个
Square实例的副本,那么您应该在Square类中提供一些复制它们的方法,例如复制构造函数。 -
@entercaspa,对象可以序列化吗?你可以使用 JAXB 或类似的东西来序列化和反序列化数组