【发布时间】:2016-01-10 12:49:56
【问题描述】:
我有一个名为state 的State 对象。我试图通过调用函数applyMoveCloning() 来克隆它,该函数使用复制构造函数创建一个名为newState 的新State 对象。
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;
}
这怎么会发生?我不是用State newState = state;克隆的,所以我不明白。
【问题讨论】:
-
我应该展示什么类,实际上没有其他东西可以处理复制。
-
@PaulBoddington 是的,这是
int[][] -
告诉我们
State。向我们展示它的字段。 -
嗯,这就是你的答案。数组是可变的。
-
嗯,我该如何解决这个问题,以便他们有单独的板?
标签: java reference copy-constructor