java对象复制

java默认采用=复制的对象均是引用复制,也即使得两个指针的值相等,其还是指向同一个对象

要想真的copy一个对象必须实现Clonable接口并添加clone方法

public class CompositeEntity implements Cloneable{

	private String compositeString = "";

	public String getCompositeString() {
		return compositeString;
	}

	public void setCompositeString(String compositeString) {
		this.compositeString = compositeString;
	}
	
	public CompositeEntity(String str){
		super();
		this.compositeString = str;
	}
	
	public Object clone(){
		CompositeEntity oEntity = null;
		try {
			oEntity = (CompositeEntity) super.clone();
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return oEntity;
	}
	
}
如此一来默认Object的clone方法native实现是内存中另开辟一块区域存放新对象并把老对象的所有property按值拷贝给新对象的property,也即浅拷贝,要形成复杂的深拷贝必须对property为引用类型的属性也执行clone

	public Object clone(){
		Entity oEntity = null;
		try {
			oEntity = (Entity) super.clone();
			oEntity.compositeEntity = (CompositeEntity)this.compositeEntity.clone();
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return oEntity;
	}
	


然后我们来研究下容器的复制方法

数组不管是使用clone、Arrays.copyOf、Systems.arrayCopy都是浅拷贝,要实现深拷贝必须自己循环便利数组并一个一个对象clone出来

容器也是同理



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值