Clone()是浅表副本 如果被拷贝的 子对象包含引用其他对象的 引用时,Clone()返回的对象的子对象,跟原来的子对象都是引用同一个 内存的。 CopyTo()深层副本,如果被拷贝的 子对象包含引用其他对象的 引用时 CopyTo() 返回的对象的 子对象,跟原来的子对象 包含同样的 数据,但是这个新的 对象所引用 对象的 地址跟原来的 对象的 地址是不一样的 publi class Instance{ public int i=0; public int j=10; public Instance (int t1,int t2){ i = t1;j = t2; } };public class MyClone { Instance ins; public MyClone(){ ins = new Instance (15,20); } public MyClone Clone(){ Instance temp = new Instance(30,45); temp.ins= this.ins; return temp; } }; public class MyCopyTO{ Instance ins; public MyCopyTO(){ ins = new Instance (15,20); } public MyCopyTo CopyTO(){ Instance temp =new Instance(30,45); temp.i =this.ins.i; temp.j = this.ins.j; return temp; } };
CopyTo()深层副本,如果被拷贝的 子对象包含引用其他对象的 引用时 CopyTo() 返回的对象的 子对象,跟原来的子对象
包含同样的 数据,但是这个新的 对象所引用 对象的 地址跟原来的 对象的 地址是不一样的
publi class Instance{
public int i=0;
public int j=10;
public Instance (int t1,int t2){
i = t1;j = t2;
}
};public class MyClone {
Instance ins;
public MyClone(){
ins = new Instance (15,20);
}
public MyClone Clone(){
Instance temp = new Instance(30,45); temp.ins= this.ins;
return temp;
}
};
public class MyCopyTO{
Instance ins;
public MyCopyTO(){
ins = new Instance (15,20);
}
public MyCopyTo CopyTO(){
Instance temp =new Instance(30,45);
temp.i =this.ins.i;
temp.j = this.ins.j;
return temp;
}
};
浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。
参考
http://www.cnblogs.com/pre_con/archive/2008/10/10/1308002.html