当前位置: 首页 > 面试题库 >

对象克隆浅拷贝不会更改变量

胡元忠
2023-03-14
问题内容

我试图克隆一个对象并更改新克隆对象的成员函数。如果是浅表复制,并且根据Wiki页面,则浅表复制和原始对象指向同一对象,则应更改变量值。

    CloneExample obj1=new CloneExample();
    CloneExample obj2=(CloneExample) obj1.clone();
    obj1.a=2;
    obj1.c='a';
    System.out.println("obj1 real "+obj1.a+" "+obj1.c);
    System.out.println("obj2 real "+obj2.a+" "+obj2.c);
    obj2.a=99;
    obj2.c='z';
    System.out.println("obj2 after change "+obj2.a+" "+obj2.c);
    System.out.println("obj1 after change "+obj1.a+" "+obj1.c);
    System.out.println("obj1="+obj1+" obj2="+obj2);

如果此克隆是浅表副本,则obj2和Obj1指向相同的引用obj,更改obj2应该反映在obj1中。不会的
任何人都可以解释(我知道克隆的目的是为我们提供对象的副本,但是如果它是浅表副本,那么为什么我们需要浅表副本?我们应该始终进行深表副本)。谢谢。


问题答案:

当您调用object.clone()时,将创建新对象。因此,您将获得对该对象的引用。只有原始类型字段的对象正在完美克隆。结果,您获得了一个与obj1副本完全独立的副本。但是,如果您的对象具有带有引用的字段,则需要进行深度克隆。



 类似资料:
  • 本文向大家介绍C# 中浅克隆与深克隆(浅拷贝与深拷贝)的区别?相关面试题,主要包含被问及C# 中浅克隆与深克隆(浅拷贝与深拷贝)的区别?时的应答技巧和注意事项,需要的朋友参考一下 (1)浅克隆 在浅克隆中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。简单来说,在

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

  • 创建一个对象的浅拷贝。 使用 Object.assign() 和一个空对象({})来创建原始对象的浅拷贝。 const shallowClone = obj => Object.assign({}, obj); const a = { x: true, y: 1 }; const b = shallowClone(a); // a !== b

  • 本文向大家介绍Java克隆执行深拷贝,包括了Java克隆执行深拷贝的使用技巧和注意事项,需要的朋友参考一下 示例 要复制嵌套对象,必须执行深层复制,如本示例所示。            

  • 我不确定以下内容是否会导致深度复制或浅复制? 有没有简单快速的方法可以深度复制字符串数组?

  • 问题内容: 似乎对此产生了很多困惑和不同意见([1]和其他来源),究竟会产生深拷贝还是浅拷贝。 该测试表明该副本很深: 该测试表明该副本较浅: 解决方案是否仅是制作顶层维度的深层副本,而其他维度是浅层副本?真相是什么? 问题答案: 它产生一个浅表副本,即一个包含“旧”引用的 新 数组(指向相同的对象,这些对象没有被复制)。 特别是,如果您有嵌套数组,则不会复制这些数组。您将得到一个新数组,其“顶级