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

Java 克隆对象正在更改原始对象,即使使用复制构造函数也是如此,java,reference,copy-constructor,Java,Reference,Copy Constructor,我有一个名为State的State对象。我试图通过调用函数applyMoveCloning()来克隆它,该函数使用复制构造函数创建一个名为newState的新State对象 public State applyMoveCloning(State oldState, Move move) { State newState = new State(oldState); // Calls copy constructor applyMove(newState, move);

我有一个名为
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()

问题是,每当我对
clonedState
进行更改时,它都会更改旧
状态的属性,即使它们是不同的对象(一个对象的属性与另一个相同)

这是我的复制构造函数

public State(State another) {
    this.width = another.width;  
    this.height = another.height; 
    this.board = another.board; 
}

这怎么会发生?我并不是在用
State newState=State进行克隆所以我不明白。

哪些属性受到影响

假设
width
height
是整数,它们是按值复制的,不太可能更改


另一方面,
board
,看起来像一个引用,而您的克隆状态正在与旧状态共享它。

我应该显示什么类,没有任何其他内容处理复制。@PaulBoddington是的,它是一个
int[][
向我们显示
状态
。给我们看看它的领域,这是你的答案。数组是可变的。嗯,那么我如何解决这个问题,使它们有单独的板?我如何修复它,使它们都有单独的板呢?@Brejuro:你必须逐个值复制板int[][]数组值。
public State(State another) {
    this.width = another.width;  
    this.height = another.height; 
    this.board = another.board; 
}