java - 在 Java 中复制对象

标签 java

我有这段 Java 代码:

boolean[][] defaultBoard = {{false, false, false},
                            {false, false, false},
                            {false, false, false}};
Board board = new Board(defaultBoard);
Board nextBoard = new Board(defaultBoard);
nextBoard.getBoard()[1][5] = true;
board.printBoard();

打印板:

public void printBoard() {
    for (boolean row[] : board) {
        for (boolean cell : row) {
            System.out.print( cell ? "#" : "." );
        }
        System.out.println();
    }
    System.out.println();
}

但它返回

...
.#.
...

这让我觉得 nextBoardboard 有相同的内存地址。我的问题是:如何创建 nextBoard 的副本,以便在编辑 nextBoard 时,也不会编辑 board

最佳答案

不是 boardnextBoard 是一样的。它是您传递给构造函数的 defaultBoard 数组。您需要传递不同的数组。否则,您只是在修改同一个数组。

更好的是,为了确保 Board 的实例始终包含一个新数组,我建议在构造函数中对数组进行深度复制。

关于java - 在 Java 中复制对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16501594/

相关文章:

java - ArrayList 返回索引的附加值

java - Android Studio 在启动时突然崩溃

java - hibernate @OneToOne @NotNull

Java:在命令行中更新文本而无需换行

java - 如何调用另一个类的方法?

java - 将 java.sql.Timestamp 转换为本地时区

java - 每次将软件分发给新用户时都手动为软件创建新数据库?

java - 使用 ProcessBuilder 通过命令行选项执行 python 脚本

java - 这个 JPQL 查询字符串有什么问题

java - TestNG 测试套件执行时间