hz90 / java-base-knowledge

0 stars 0 forks source link

java 深copy和浅copy #8

Open hz90 opened 5 years ago

hz90 commented 5 years ago

class student{ public int age; public Date date; public student (int age,Date date){ this.age=age; this.date=date; } }

浅copy(复制值,基本类型数值,引用类型引用地址) a1:基本类型(成员变量c1)引用类型(成员变量c2) 浅copy a2(新对象) :基本类型(成员变量c1)引用类型(成员变量c2,和a1引用相同) student代码{ //重写clone方法 public object clone(){ super.clone(); } }

代码{ student s1=new student(12,new Object()); //java clone方法就是浅复制 student s2=s1.clone(); } s1==s2;//false s1.equals(s2);//false s1.date==s2.date;//true s1.date.equals(s2.date);//true

深copy(引用是复制一个新的) a1:基本类型(成员变量c1)引用类型(成员变量c2) 深copy a2(新对象) :基本类型(成员变量c1)引用类型(成员变量c2,对a1的成员变量也进行copy) student代码{ //重写clone方法 public object clone(){ student s=super.clone(); s.date=this.date.clone(); return s; } } 代码{ s1==s2;//false s1.equals(s2);//false s1.obj==s2.obj;//true s1.obj.equals(s2.obj);//true } java.util.Date://实现了Cloneable;

如果想让复制以后对象相比较的话,重写equals就可以