Java中Cloneable接口的用法

来源:互联网 发布:出去旅游哪个软件好 编辑:程序博客网 时间:2024/04/30 04:40

Java中Cloneable接口的用法

今天编写一个用到Cloneable接口的程序时才注意到原来clone()方法提供的是浅层拷贝,而不是我先前认为的深层拷贝。
class A implements Cloneable{
    int a=1;
    ArrayList b=new ArrayList();
    public A getClone(){
       return (A) this.clone();
    }
}
对于这样的一个类,如果调用它的getClone()方法进行复制的话,成员变量a会被复制,但是成员变量b不会像预想的那样会复制一个ArrayList(),复制的对象与原先的对象中的b都会指向相同的一个ArrayList()。因此如果需要做深层拷贝需要添加额外的代码。
class A implements Cloneable{
    int a=1;
    ArrayList b=new ArrayList();
    public A getClone(){
       A temp=(A) this.clone();
       temp.b=new ArrayList();
       for(int i=0;i<b.size();i++){
          temp.b.add(b.get(i));
       }
       return temp;
    }
}

原始对象中的字符串和数组不受到克隆对象设置值的影响(会创建一个独立的),而类对象变量则会受到了克隆对象的影响。如list、map........ ;static修饰的也将是以引用的形式克隆

原创粉丝点击