java 中对象赋值 是浅拷贝还是深层拷贝

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 中对象赋值 是浅拷贝还是深层拷贝相关的知识,希望对你有一定的参考价值。

对于对象赋值,引用类型是浅拷贝,复制的是引用(即地址),基本类型是深层拷贝(直接复制值)。 参考技术A 是深层拷贝

深拷贝和浅拷贝及实现

什么是浅拷贝和深拷贝

首先需要明白,浅拷贝和深拷贝都是针对一个已有对象的操作。那先来看看浅拷贝和深拷贝的概念。

在 Java 中,除了基本数据类型(元类型)之外,还存在 类的实例对象 这个引用数据类型。而一般使用 『 = 』号做赋值操作的时候。对于基本数据类型,实际上是拷贝的它的值,但是对于对象而言,其实赋值的只是这个对象的引用,将原对象的引用传递过去,他们实际上还是指向的同一个对象。

而浅拷贝和深拷贝就是在这个基础之上做的区分,如果在拷贝这个对象的时候,只对基本数据类型进行了拷贝,而对引用数据类型只是进行了引用的传递,而没有真实的创建一个新的对象,则认为是浅拷贝。反之,在对引用数据类型进行拷贝的时候,创建了一个新的对象,并且复制其内的成员变量,则认为是深拷贝。

所以到现在,就应该了解了,所谓的浅拷贝和深拷贝,只是在拷贝对象的时候,对 类的实例对象 这种引用数据类型的不同操作而已。

总结来说:

1、浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。

技术分享图片

2、深拷贝:对基本数据类型进行值传递,对引用数据类型,创建一个新的对象,并复制其内容,此为深拷贝。

技术分享图片

以上是关于java 中对象赋值 是浅拷贝还是深层拷贝的主要内容,如果未能解决你的问题,请参考以下文章

C++中,啥是深拷贝?啥是浅拷贝?

Java 浅拷贝和深拷贝

PHP中对象的深拷贝与浅拷贝

php深拷贝与浅拷贝

总结:Python的赋值深拷贝浅拷贝有什么区别

Python入门-6面向对象编程:11对象的浅拷贝和深拷贝