JAVA深拷贝和浅拷贝

package Test;

import java.io.IOException;
import java.util.Date;

public class Obj implements Cloneable{
private Date birth=new Date();
private String name;
public Date getBirth() {
	return birth;
}
public void setBirth(Date birth) {
	this.birth = birth;
}
public void changeDate(){
	this.birth.setMonth(4);
}
public String getName() {
	return name;
}
public void setName(String name) {
	this.name = name;
}
@Override
public Obj clone(){
	Obj o = null;
	try {
		//先执行的浅拷贝
		 o=(Obj)super.clone();
	} catch (CloneNotSupportedException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	//对类的非基本类型,o.attr=this.getAttr().clone() 执行深拷贝,下面两条都行
	o.setBirth((Date)this.getBirth().clone());
//	o.birth=(Date)this.getBirth().clone();
	return o;
}
	public static void main(String[] args){
			Obj a=new Obj();
			Obj b=a;
			Obj c;
			c = (Obj)a.clone();
			b.changeDate();
			System.out.println("a1="+a.getBirth());
			System.out.println("b1="+b.getBirth());
			System.out.println("c1="+c.getBirth());
			//  本来都是这个结果,c1=Sun Aug 13 15:46:47 CST 2017,b.changeDate()改变了a,b的值
			c.changeDate();
			System.out.println("a2="+a.getBirth());
			System.out.println("b2="+b.getBirth());
			System.out.println("c2="+c.getBirth());
	}

}


结果

a1=Sat May 13 15:53:50 CST 2017
b1=Sat May 13 15:53:50 CST 2017
c1=Sun Aug 13 15:53:50 CST 2017
a2=Sat May 13 15:53:50 CST 2017
b2=Sat May 13 15:53:50 CST 2017
c2=Sat May 13 15:53:50 CST 2017

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值