谨慎地覆盖clone

什么是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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容