Java 复制构造函数不工作

Java copy constructor not working

我已经阅读了很多关于复制构造函数的帖子,但我似乎无法让它工作。我调用了复制构造函数,但对象仍然修改了原来的:

public class Board {
    private Square[][] board = getEmptyBoard();

    public Board() {    
    }

    public Board(Board originalBoard) {
        Square[][] matrix = new Square[6][6];
        for(int row = 0; row <= 5; row++) {
            for(int col = 0; col <= 5; col++) {
                matrix[row][col] = originalBoard.getSquare(row, col);
            }
        }
        this.board = matrix;
    }
    [...]
}

class 模拟一个类型为 Square 的 6×6 板。 Square 是一个对象,可以容纳一个或多个类型为 Piece 的对象。

我怎样才能拿走我的原始板并制作它的精确副本,以便我可以在 Square 中添加和删除 Piece,而无需触及原始 Board对象?

您的深拷贝不够深。您已经创建了自己的二维 Square 数组,但该数组引用与 originalBoard 相同的 Square 对象。

您需要复制从 originalBoard 获得的 Square 对象。根据 Square 对象包含的内容,您需要在复制构造函数中复制其属性(例如 Piece)。

由于您使用的是 Objects (Square) 而不是基元,通过关联 matrix[row][col] = originalBoard.getSquare(row, col); 您将获得对象的引用,任何修改都会更改两个引用。

如果您想复制确切的状态并进行修改,那么您应该在您的 Square class 上实现 Cloneable 并在关联到复制数组时调用 clone()