gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:52:59 26 4
gpt4 key购买 nike

我有一个State名为 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;
}

怎么会发生这种事?这不像我使用 State newState = state; 进行克隆所以我不明白。

最佳答案

哪些属性受到影响?

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

另一方面,

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

关于java - 即使使用复制构造函数,克隆对象也会更改原始对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33091331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com