美文网首页
【Java】对Object.clone的理解

【Java】对Object.clone的理解

作者: littlefogcat | 来源:发表于2021-06-18 01:07 被阅读0次

Object.clone的理解

通过实现Cloneable接口和重写clone方法可以实现拷贝对象。

这里clone方法实现的是浅拷贝,即字段只是复制相应的引用。如下示例中所示,对象a进行克隆之后得到一个新对象aClone,而a.baClone.b其实是同一个对象。

class CloneTest {

    static class A implements Cloneable {
        B b = new B();

        @Override
        protected Object clone() throws CloneNotSupportedException {
            return super.clone();
        }

        @Override
        public String toString() {
            return b.name;
        }
    }

    static class B {
        String name = "bob";
    }

    public static void main(String[] args) throws Exception {
        A a = new A();
        A aClone = (A) a.clone();
        System.out.println(a);
        System.out.println(aClone);
        a.b.name = "alice";
        System.out.println(a);
        System.out.println(aClone);
    }

输出:

bob
bob
alice
alice

如何实现深拷贝?

1. 序列化

通过实现Serializable接口或者通过json将对象序列化,再反序列化为对象。
这么做的缺点在于,就是如果通过Serializable进行序列化,那么类的所有成员都必须实现Serializable接口才行;如果通过json序列化,那么会面临循环引用的问题。

2. 反射

通过反射可以获取对象的所有字段并进行递归克隆。这种方式的难点在于如何处理不包含无参构造方法的类对象。

3. 其他方式

目前看到的其他方式,诸如覆写clone方法等,均无实操意义,不提。

相关文章

  • 【Java】对Object.clone的理解

    Object.clone的理解 通过实现Cloneable接口和重写clone方法可以实现拷贝对象。 这里clon...

  • 对java锁的理解

    比如淘宝抢购的时候,数量有限 多个用户共同抢购,调用同一个方法,必须上锁synchronized,避免数据库更新错误。

  • 对java平台的理解

    Java 本身是一种面向对象的语言,最显著的特点有两个方面,一个是“书写一次,到处运行”,因为JVM的存在,所以j...

  • 对Java平台的理解

    一、谈谈对Java平台的理解: Java是一种面向对象的语言,最显著的特性有两个方面,一是“write once,...

  • Java - 对Hashcode的理解

    hashcode方法的注释 从下面的注释中可以得出以下几点重要信息: 如果两个对象通过equals方法比较返回tr...

  • 对java enum的理解

    写在前面 在java中enum也是一个类,这也就意味着它具有类的基本特性,比如你可以定义类方法、字段等等。它与普通...

  • 对java平台的理解

    Java特性: 1 面向对象(封装,继承,多态), 2 平台无关性(JVM运行.class文件),语言(泛...

  • java平台的理解

    对java平台的理解 问题1 对java平台的理解? java本身是一种面向对象的语言,最显著的两个特点:书写一次...

  • Java中Object.clone()方法详细解析

    简书:capo转载请注明原创出处,谢谢! 前言: 今天,我们来聊聊Object中clone()方法实现细节。首先我...

  • JVM学习之—Java内存区域

    为了加深对Java语言的理解,加深对Java虚拟机工作机制、底层特性的了解和掌握,准备在闲暇时间,抽空对《深入理解...

网友评论

      本文标题:【Java】对Object.clone的理解

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