java 类复制构造方法_简单介绍JAVA中的浅拷贝与深拷贝

在java程序语言中,最常用的拷贝操作主要有operator=、拷贝构造函数和clone()方法这三个。今天小编就主要带大家学习一下深拷贝以及浅拷贝相关的认识。浅拷贝与深拷贝都是两个比较通用的概念,尤其是在C++语言中,若弄不明白的话,就会在delete操作的时候出问题,但是我们在这幸好使用的是Java。那么我们现在就进入主题吧。

一、名词解释

首先小编先带大家来看一下,深拷贝(即深复制)以及浅拷贝(即浅复制)这两者的定义吧。

①深拷贝:对象,对象内部的引用都可以进行复制。通俗一点来说,不仅仅拷贝对象的本身,而且还可以拷贝对象包含的引用指向的所有对象。

②浅拷贝:只可以复制一个对象,对象内部存在的指向其他对象数组或者是引用则不复制。正正与深拷贝相反,它在拷贝对象的时候,仅仅只可以拷贝对象本身(也包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。

二、深入理解

好了,为了可以让大家更加深入的理解它们两者之间的区别。小编在这篇教程中,首先先假设有一个名字为A的对象。在这个A对象中,它包含这有两个对象,分别是对象A1以及对象A2。具体的关系图,可以参考下面的图像。如图所示:

3cabeed35dc8e1ce544b8294c8670fd0.png

①A对象在进行了深拷贝操作以后,在得到B对象的时候,同一时间,我们可以看到A1以及A2连同它们之间的引用也被拷贝过来了。这就是我们所说的深拷贝。如图所示:

b4b47e668ed9e1a6d21cf8c2e6ed5956.png

②A对象进行了浅拷贝操作以后,在得到B对象的时候,我们可以看到与深拷贝操作有点不同,那就是对象A1以及A2都没有被拷贝过来。如图所示:

25045a8034148abd6a82d34f611b5051.png

三、实现方法

相信经过小编的讲解以后,大家已经对浅拷贝与深拷贝有了一定的理解了吧。接下来,小编就带大家看一看究竟如何实现Java浅拷贝与深拷贝吧。具体的实现方法如下:

其实在java.lang.Object中的clone()方法,默认就是返回一个前拷贝的对象。所以说,假如我们真的要使用这个clone()方法来实现一个深拷贝操作的话,那么我们就一定要给每一个对象的clone()方法进行一个特别的实现。当对象的层次比较复杂的时候,这种做法,不但容易出现错误的现象和浪费时间而且还很困难才可以实现。特别就是在你不但要对这个对象进行浅拷贝操作,同一时间你还需要进行深拷贝操作的时候,那么你就会深刻的理解到编写这个clone()方法真的不是一个较为理想的解决方案。所以大家在写这个方法的时候,一定要慎重考虑哟!

那么有人会问,除了小编所说的clone()方法以外,还有什么好的方法可以实现咯?方法肯定是有的,那就是——序列化。序列化(Serialization)就是把对象的状态信息转换为可以存储或传输的形式的过程。它的实现思路以及步骤很简单,其实就是把要进行拷贝的对象输出成为byte array,然后我们只要再利用一下ObjectInputStream转换出一个新的对象就可以了。具体的代码,可以参考下图,如图所示:

5226653eebb6ce9f9c09f34a4aa8a63d.png

小编结语:

大家通过教程可以看到,小编主要分了三个部分来简单介绍一下JAVA浅拷贝与深拷贝的知识点,那么你学会了吗?了解到它们之间有什么区别了吗?今天的编程语言教程就已经介绍完毕了,如果你还是与犹未尽,可以进入我们的官网课课家教育,了解更多的java入门教程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值