博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Java学习笔记]对象克隆
阅读量:7038 次
发布时间:2019-06-28

本文共 765 字,大约阅读时间需要 2 分钟。

对象克隆:

浅克隆:

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

 

深克隆:

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

 


 

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

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方法是一个浅复制

 

转载于:https://www.cnblogs.com/hellenism/p/3723889.html

你可能感兴趣的文章
「实用教程」登录失败超过一定次数如何锁定帐号?
查看>>
java创建线程的三种方式
查看>>
ElasticSearch DSL Script使用案例分享
查看>>
你真的懂JavaScript计时器吗?
查看>>
CI框架如何在主目录application目录之外使用uploadify上传插件和bootstrap前端框架:...
查看>>
游乌镇
查看>>
使用Akka持久化——持久化与快照
查看>>
springboot之RMI的使用
查看>>
【NLP】揭秘马尔可夫模型神秘面纱系列文章(三)
查看>>
openstack 云服务上创建的虚拟机,主机名修改
查看>>
css3 贝塞尔曲线cubic-bezier(x1, y1, x2, y2)
查看>>
远程连接docker daemon,Docker Remote API
查看>>
C语言dll文件的说明以及生成、使用方法
查看>>
【Web API系列教程】1.3 — 实战:用ASP.NET Web API和Angular.js创建单页面应用程序(上)...
查看>>
java基础学习_面向对象(上)03_day08总结
查看>>
NG-ZORRO 7.3.1 发布,Ant Design 的 Angular 实现
查看>>
20180417PLSQL中sql语句格式化与注解问题
查看>>
Java 基础 之 while 循环
查看>>
顺丰今天上市了,王卫又成了民营快递业的首富
查看>>
前端和云端性能分析工具分析报告
查看>>