【问题标题】:Arrays.copyOf not returning deep Copy of objects [duplicate]Arrays.copyOf 不返回对象的深层副本 [重复]
【发布时间】: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 中的对象?

【问题讨论】:

  • 在这里查看选项:stackoverflow.com/questions/122102/…
  • 那是javascript,arathorn之子,我需要java!
  • 哦,我今天早上的咖啡呢,哈哈
  • 如果您需要每个Square 实例的副本,那么您应该在Square 类中提供一些复制它们的方法,例如复制构造函数。
  • @entercaspa,对象可以序列化吗?你可以使用 JAXB 或类似的东西来序列化和反序列化数组

标签: java arrays clone


【解决方案1】:

尝试使用类似的东西

public Square[][] copy_array(Square[][] board) {

    Square[][] nv = new Square[8][8];
    for (int i = 0; i < nv.length; i++)
        nv[i] = board[i].clone();

    return nv;
}

我没有测试它,但是 clone 做了一个深拷贝

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 2016-07-09
    • 1970-01-01
    • 2016-02-15
    • 2015-12-28
    • 2013-04-09
    相关资源
    最近更新 更多