今天工作中碰到一个clone的问题

本文探讨了Java中实现对象克隆时遇到的问题,通过具体案例分析了浅拷贝的特性,即只复制对象本身及基本数据类型,而引用类型如ArrayList则共享同一实例。
今天开发中遇到一个问题:

需要将一个对象进行clone,对他的副本的属性进行修改,供一个特定的对象使用,完成某个需求。

平时对java的clone看的不是很多,相当然的使用了Object的clone()方法:

SomObject obj = new SonObject();


SomObject objClone =obj.clone();

结果发现更新obj的某个成员变量的时候(ArrayList),objClone中的成员变量也相应的发生变化!但是obj.hashCode() 却不等于objClone.hashCode(),说明他们并没有指向同一个对象!看到这个结果一下子蒙了,这是为什么呢??

仔细想了一下,恍然大悟:java中的clone是浅拷贝,只是拷贝对象本身,以及基本数据类型,对于对象的非基本数据类型变量,比如ArrayList等,并不进行拷贝!

---------
java 代码
 
public class SomObject implements Cloneable{          private List wifeList;          private int count;          ....          public Object clone(){           try{               return super.clone();           }catch(....){               ....           }           return null;       }   }      SomObject obj = new SomObject();      obj.setCount(1);   obj.setWifeList(new ArrayList("Beautifule"));      SomObjec cloneObj = (SomObject)obj.clone();      obj.setCount(2);   obj.setWifeList(new ArrayList("Tender"));      System.out.println(obj.getCount());//结果 2   System.out.println(obj.getWifeList().get(0));//Tender         System.out.println(cloneObj.getCount());//结果 1   System.out.println(cloneObj.getWifeList().get(0));//Tender  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值