zoukankan      html  css  js  c++  java
  • java学习之路——对象的浅复制和深复制

    对象的浅复制和深复制有两种方法:

    第一种:通过重写clone()方法实现

    1.浅复制与深复制概念
    ⑴浅复制(浅克隆)
        被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
    ⑵深复制(深克隆)
        被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。
    2.Java的clone()方法
    ⑴clone方法将对象复制了一份并返回给调用者。一般而言,clone()方法满足:
    ①对任何的对象x,都有x.clone() !=x//克隆对象与原对象不是同一个对象
    ②对任何的对象x,都有x.clone().getClass()= =x.getClass()//克隆对象与原对象的类型一样
    ③如果对象x的equals()方法定义恰当,那么x.clone().equals(x)应该成立。
    ⑵Java中对象的克隆
    ①为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。
    ②在派生类中覆盖基类的clone()方法,并声明为public。
    ③在派生类的clone()方法中,调用super.clone()。
    ④在派生类中实现Cloneable接口。 

    例如:


    上图为浅复制。


    上图为深复制。

    第二种:实现深复制的方法是通过串行化和反串行化

    利用对象串行化的特性:一个对象如果进行串行化则会将它所引用的对象都进行串行化。所以它的这个特性正好符合深度复制的要求。

    例如以下示例:



  • 相关阅读:
    Numpy 里线性代数函数
    lateral view 使用方法
    Numpy 基础函数
    Numpy 基础操作
    pandas 基础操作记录学习
    pandas向左移动非空单元格
    供应商自动记账
    SAP Smartforms 参数配置
    SAP FPM 相关包 APB_FPM_CORE
    SAP BPC 清除CUBE 中的数据
  • 原文地址:https://www.cnblogs.com/lcqBlogs/p/2392384.html
Copyright © 2011-2022 走看看