美文网首页
谨慎地覆盖clone

谨慎地覆盖clone

作者: 大海孤了岛 | 来源:发表于2017-03-21 22:39 被阅读38次
什么是clone?

clone实际上就是复制。所谓的复制指的是先创建一个对象,然后将源对象中的数据导入到新创建的对象中。

复制对象和复制引用的区别:

我们看到下面一个例子:

public class Person implements Cloneable{
    private String name;
    private int age;
    private boolean sex;

    public Person(String name, int age, boolean sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public static void main(String[] args) throws CloneNotSupportedException {
        Person p = new Person("John", 21, true);
        Person p1 = p;
        Person p2 = (Person) p.clone();
        System.out.println("p: " + p);
        System.out.println("p1: " + p1);
        System.out.println("p2: " + p2);
    }
}
输出结果:
p: clone_demo.Person@1b6d3586
p1: clone_demo.Person@1b6d3586
p2: clone_demo.Person@4554617c

我们可以看到结果:对于复制引用,即对象p1,它所指向的地址和源对象地址是相同的,而对于对象p2,它是通过clone方法获取到一个新的对象地址,和源地址是不同的。可见,复制引用只是将引用指向了源对象地址,而clone方法是真正地克隆了一个对象。

深拷贝与浅拷贝

http://blog.csdn.net/zhangjg_blog/article/details/18369201

相关文章

网友评论

      本文标题:谨慎地覆盖clone

      本文链接:https://www.haomeiwen.com/subject/zvhnnttx.html