深拷贝和浅拷贝、及实现方式

红太狼 2023-10-14 12:25 103阅读 0赞
  • 直接赋值复制:

理解:两个相同的类对象赋值的话,复制的是引用,如将a2赋值给a1(A a1 = a2),则两个变量指向同一个对象,所以当a1变化时,a2也会变化;反之当a2变化时,a1也会变化。

21211927_iu9y.png

  • 浅拷贝:

理解: 创建一个新对象,将当前对象的非静态字段复制到该新对象,如果是基本数据类型,复制值;如果是引用数据类型, 复制引用但不复制引用的对象 即 两个对象的地址 指向 的是同一个 地址 。

21211927_P4JI.png

  • 深拷贝:

理解:深拷贝复制的不只是对象本身,还有对象包含的引用指向的所有对象, 即创建一个相同的对象,但 两个对象是单独分开的 ,各自指向各自的地址 。

21211927_Sqd8.png

  • 内存四大组成部分:栈区、堆区、全局/静态区、只读区
  1. 栈区:

存放数据:局部参数、形参

  1. 堆区:

存放数据:new出来的数据

  1. 全局/静态区:

存放数据:全局变量和静态变量

  1. 只读区:

存放数据:常量

21211927_j7vB.png

总结:

浅拷贝:复制引用但不复制引用的对象 ( 也就是简单的把栈中的引用地址拷贝了一份,当修改新拷贝的值的时候,被拷贝的对象也会被修改 )

实现: 正常的赋值就是浅拷贝。

深拷贝:复制引用并且复制引用的对象( 深拷贝的话会在堆内存中为新对象建立空间,也就是两个对象拥有各自的地址。

实现:最常用的是使用递归的方式实现, 也可以使用JSON、Object.assgin、MessageChannel实现

深拷贝的实现方式(超全) - 掘金 (juejin.cn)

发表评论

表情:
评论列表 (有 0 条评论,103人围观)

还没有评论,来说两句吧...

相关阅读

    相关 拷贝拷贝

    深拷贝和浅拷贝的理解? 深拷贝和浅拷贝是针对复杂数据类型来说的,浅拷贝只拷贝一层,而深拷贝是层层拷贝。 浅拷贝:将原数组和原对象的引用直接拷贝到新数组和新对象,新对象只

    相关 拷贝拷贝

    一、浅拷贝 1、浅拷贝和赋值的区别     赋值:当我们把一个对象赋值给一个新变量时,赋的其实是这个对象在栈中的地址,而不是堆中的数据,也就是两个对象指向的是同一个

    相关 拷贝拷贝

    最近更新时间:2017年11月28日22:44:54 [《我的博客地图》][Link 1]     对于程序员来说,编程语言就像是创作的工具,掌握扎实的语言功底才能创作出优

    相关 拷贝拷贝

    深拷贝和浅拷贝 浅拷贝:对变量进行比较浅层次的拷贝,比如变量的赋值,其实2个变量都指向同一个内存地址。内存地址共享。 深拷贝:对变量进行深层次的拷贝,拷贝了一份数据,2

    相关 拷贝拷贝

    深拷贝和浅拷贝 浅拷贝,只是拷贝基本类型的数据,而引用类型数据,是复制的引用而不是复制的对象。 深拷贝,将原对象所有的数据复制一份到另一个新开辟的空间。 Java

    相关 拷贝拷贝

    浅拷贝 浅拷贝会创建新对象,其内容非原对象本身的引用,而是原对象内第一层对象的引用。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5n