2d数组没有深度克隆,更改会影响两个数组

时间:2014-06-13 12:17:54

标签: java arrays clone maze

我需要克隆一个2d的Cell对象数组,但它并没有按预期工作。每当我克隆迷宫时,它会克隆它,但是当我对其进行更改时,它也可以在另一个上看到

有人知道问题是什么???

public void cloneMaze(boolean backup)
{
    if (backup) {
        backupMaze = (Cell[][]) maze.clone();
        for (int i = 0; i < maze.length; i++) {
            backupMaze[i] = (Cell[]) maze[i].clone();
        }
    } else {
        maze = (Cell[][]) backupMaze.clone();
        for (int i = 0; i < backupMaze.length; i++) {
            maze[i] = (Cell[]) backupMaze[i].clone();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

备份迷宫中,您需要创建 new Cell,这是第一个

的副本

否则你的两个迷宫指向相同的物体,因此对细胞的修改会反映在两个迷宫中。

clone()只是数组的浅层副本,而您似乎在寻找深层副本