当前位置: 首页 > 知识库问答 >
问题:

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

夹谷星河
2023-03-14
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;
}
State clonedState = game.applyMoveCloning(state, moves.get(i));

这是我的复制构造函数

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

怎么会这样?这不像是我使用state newState=state;进行克隆,所以我不理解。

共有1个答案

壤驷康裕
2023-03-14

哪些属性受到影响?

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

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

 类似资料:
  • 问题内容: 我一直认为无需调用构造函数即可创建对象。 但是,在 明智地 阅读《有效的Java 项目11:覆盖克隆》时 ,我发现了一条声明,指出 “没有调用构造函数”的规定太强了。行为良好的克隆方法可以调用构造函数来创建正在构建的克隆内部的对象。如果该类是最终的,则clone甚至可以返回由构造函数创建的对象。 有人可以向我解释一下吗? 问题答案: 我一直以为clone()会创建一个对象而不调用构造函

  • 我一直认为,clone()创建对象时不需要调用构造函数。 但是,在阅读有效Java第11条:明智地覆盖克隆时,我发现了一条声明,上面写着 “不调用构造函数”的规定太强了。行为良好的克隆方法可以调用构造函数来创建正在构建的克隆内部的对象。如果类是最终的,克隆甚至可以返回构造函数创建的对象。 谁能给我解释一下吗?

  • 问题 你想复制一个对象,包含其所有子对象。 解决方案 clone = (obj) -> if not obj? or typeof obj isnt 'object' return obj if obj instanceof Date return new Date(obj.getTime()) if obj instanceof RegExp flags

  • Threejs大多数对象都有克隆.clone()和复制.copy()两个方法,点模型Points、线模型Line、网格网格模型Mesh一样具有这两个方法。 复制方法.copy() A.copy(B)表示B属性的值赋值给A对应属性。 var p1 = new THREE.Vector3(1.2,2.6,3.2); var p2 = new THREE.Vector3(0.0,0.0,0.0); p2

  • 问题内容: 我试图克隆一个对象并更改新克隆对象的成员函数。如果是浅表复制,并且根据Wiki页面,则浅表复制和原始对象指向同一对象,则应更改变量值。 如果此克隆是浅表副本,则obj2和Obj1指向相同的引用obj,更改obj2应该反映在obj1中。不会的 任何人都可以解释(我知道克隆的目的是为我们提供对象的副本,但是如果它是浅表副本,那么为什么我们需要浅表副本?我们应该始终进行深表副本)。谢谢。 问

  • 我已经编写了一个测试应用程序,用于演示使用浅层、深层和复制构造函数的Java克隆。 我实现了浅和深,但与复制构造函数我认为我错过了一些东西。 请查看下面的代码,并让我知道复制构造函数实现的修复方法。 输出(复制构造函数) 15007 Amit Chirimiri Kripalu 15007 Amit Chirimiri ShriKrishn 编辑: 由于学生类包含嵌套类(教师)引用,简单的复制构造