您的位置:首页 > 编程语言 > Java开发

Java中Cloneable接口的用法

2013-08-22 15:44 627 查看


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修饰的也将是以引用的形式克隆
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐