对象克隆浅拷贝不会更改变量 [英] Object Clone Shallow copy doesn't change variable

查看:89
本文介绍了对象克隆浅拷贝不会更改变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I tried to clone an object and change member functions of new clonned object. If it is shallow copy and according to wiki page, shallow copy and original object point to same object then , it should change the variable value.

    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中。不会发生任何人都可以解释(我知道克隆的目的是为我们提供对象的副本,但是如果它是浅表副本,那么为什么我们需要浅表副本?我们应该始终进行深表副本)。
谢谢。

If this clone is shallow copy, then obj2 and Obj1 point to same reference obj, altering obj2 should reflect in obj1. It doesn't happen. Can any one explain (I understand clone is designed to give us copy of object, but if it is shallow copy then why we need shallow copy?, we should always go for deep copy). Thank you.

推荐答案

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

When you call object.clone(), new object is created. So as a result you get reference to this object. Object with only primitive type field are cloning perfectly. As a result you get a full independent from your obj1 copy. But if your object has fields with references, you need to do a deep cloning.

这篇关于对象克隆浅拷贝不会更改变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆