假设有两个class:A和B
public class A{
public int i;
public B b;
public A{
i=0;
b=new B();
}
}
public class B{
public int j;
public B(){
j=0;
}
}
现在你要copy A类型的对象
public A shallowCopy (A a){
A ca=new A();
ca.i=a.i;//深拷贝,因为基本类型是直接传值
ca.b=a.b;//浅拷贝,非基本类型传递的是对象的引用
return ca;
}
所以,如果你使用这个函数
A a=new A();
A da=shallowCopy(a);
则da.b跟a.b指向的是同一个对象。如果你希望更深一层的copy
可以实现B的clone方法
public class B{
public int j;
public B(){
j=0;
}
public Object clone(){
B b=new B();
b.j=this.j;
return j;
}
}
则深拷贝方法实现如下
public A deepCopy(A a){
A ca=new A();
ca.i=a.i;
ca.b=(B) a.b.clone();
return ca;
}