帖子:
http://topic.csdn.net/u/20080721/20/2d1be221-5e1d-48a3-b493-6e8a9eceae1e.html?seed=1231546968
比如说有下面的这样的类
public class A
{
ArrayList list;
public A()
{
list = new ArrayList();
}
}
A a = new A();
A b = (A)a.clone();
这样的结果默认情况下呢,a.list与b.list的值是一样,也就是指向了一个同一个对象,如果通过a.list操作,b.list也就被改变了.
浅克隆就是简单的成员复制.但成员所引用的对象没有得到复制.所以要覆盖clone方法,不但都有一个ArrayList类型的成员,而且这个成员所引用的 < < <对象的内容>>>也一样的,但不是同一个.
String a =new String("a");
String b = a;
这时候可以说b是a的简单克隆.
String a = new String("a");
String b = new String(a);
这样可以理解为深克隆,两者的内容都是一样的.
public class A
{
ArrayList list;
public A()
{
list = new ArrayList();
}
protect Object clone()
{
A b = new A();
b.list = this.list.clone();
return b;
}
}
因为ArrayList的clone已经覆盖了Object的,所以这样就形成了深克隆.
不覆盖那个方法的时候:
A a = new A();
A b = (A)b.clone();
a.list==b.list-->true;
覆盖方法之后
A a = new A();
A b = (A)b.clone();
a.list==b.list-->false;