• [Java学习笔记]对象克隆


    对象克隆:

    浅克隆:

    被克隆的对象中的值类型数据被复制一份新值,但是引用的对象只被复制其引用传递给新克隆出来的对象

    深克隆:

    被克隆的对象中的值类型数据被复制一份新值,并且其中引用的对象会重新创建新的对象,把新对象的引用传递给新克隆出来的对象


    一般情况下,认为克隆出来的对象与原对象的关系应该是:

    x.clone() != x                                   // 引用不等,分别是两个不同的对象
    x.clone().getClass() == x.getClass()   // 类型相等
    x.clone().equals(x)                            // 逻辑相等

    但不是强制的


    Java中实现克隆:

    Java中Object中定义了clone方法,默认为浅克隆操作,即你只是简单super.clone得到的结果是浅克隆的结果,如果需要深克隆,则需要实现Cloneable接口,并且重写clone方法

    查看Java源代码发现Object中的克隆方法如下:

    protected native Object clone() throws CloneNotSupportedException;

    通过JNI调用,也就是Object的默认clone实现就是C++中的浅克隆操作.

    C++中克隆(复制)一个对象的途径一般为两种:

    一是实现类的【复制构造函数】

    二是实现【=号运算符】的重载

    对于C++而言,所谓的浅克隆和深克隆就只是一个概念了,需要浅克隆那么在上述两种操作中就传递指针,如果需要深克隆则new出新的对象即可

    一个类不显示实现此两个方法,无法进行对象的克隆(复制),然而由于Java的Object是默认浅克隆,所以可推断Object中的native clone方法是一个浅复制

  • 相关阅读:
    重新温习软件设计之路(4)
    重新温习软件设计之路(3)
    技术判断力
    GIS基本函数类库Delphi代码
    C#文本转语音并保存wav和MP3文件
    多网卡多网关浏览器访问外网
    自信与乐观
    System.Security.SecurityException when writing to Event Log
    4010 An unhandled security exception has occurred. IIS 8.5
    How to make a grid (like graph paper grid) with just css?
  • 原文地址:https://www.cnblogs.com/hellenism/p/3723889.html
Copyright © 2020-2023  润新知