即使使用复制构造函数,克隆对象也在更改原始对象

时间:2015-10-12 22:39:07

标签: java reference copy-constructor

我有一个名为State的{​​{1}}对象。我试图通过调用函数state来复制它,它使用复制构造函数创建一个名为applyMoveCloning()的新State对象。

newState

以下是我致电public State applyMoveCloning(State oldState, Move move) { State newState = new State(oldState); // Calls copy constructor applyMove(newState, move); // Calls applyMove() on the newState return newState; }

的地方
applyMoveCloning()

问题在于,每当我对State clonedState = game.applyMoveCloning(state, moves.get(i)); 进行更改时,它都会更改旧clonedState的属性,即使它们是不同的对象(一个只具有与另一个相同的属性)

这是我的复制构造函数

state

怎么会发生这种情况?这不像是我使用public State(State another) { this.width = another.width; this.height = another.height; this.board = another.board; } 进行克隆所以我不理解。

1 个答案:

答案 0 :(得分:1)

哪些属性受到影响?

假设widthheight是整数,它们会按值复制,不太可能发生变化。

另一方面,

board看起来像一个参考,你的克隆状态正在与旧状态共享。