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

Cloned object is changing original object even with using a copy constructor

我有一个名为 stateState 对象。我试图通过调用函数 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;克隆的,所以我不明白。

哪些属性受到影响?

假设 widthheight 是整数,它们是按值复制的,不太可能改变。

另一方面,

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