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