复制模式:先复制实例里面引用指向的实例,然后再赋值外面的实例。
赋值模式主要是解决深复制的问题,说到深赋值那么就是有浅复制。
浅复制:从一个实例复制到另外一个实例的时候,基本数据类型都直接复制,同样引用数据类型的也直接复制
就会出现多个实例的成员变量中引用指向同一个实例(内存空间)
深复制:就是如果实例中的成员变量有引用的,先把引用指向的实例先复制一份,当外层实例复制的时候,用private构造函数先把引用指向的实例传给新外层实例。
class A {
private int n1;
public void setN1(int n1){
this.n1 = n1;
}
public int getN1(){
return n1;
}
public A copy(){
A a = new A();
a.n1 = n1;
return a;
}
}
class B{
private int n2;
private A a;
private B(A a){ //这个私有构造方法用于copy()
this.a = a.copy();
}
public void setN2(int n2){
this.n2 = n2;
}
public int getN2(){
return n2;
}
public void setA(int n1){
a.setN1(n1);
}
public B copy(){
B b = new B(this.a);
return b;
}
}