美文网首页
2019-07-30 深拷贝和浅拷贝

2019-07-30 深拷贝和浅拷贝

作者: 北子萌 | 来源:发表于2019-07-30 16:33 被阅读0次

    一、浅拷贝

    数据类型如果是基本类型,会按照值传递,进行赋值操作,将属性值复制一份给新的对象;

    如果是引用类型的数据变量,将内存的引用地址复制一份给新的变量,实际上是两个对象的成员变量都指向一个实例;

    这种情况下对一个成员变量的修改会影响到另一个成员变量。

    二、深拷贝

    不止要复制对象的 所有基本属性和成员对象的值,还要为所有对象申请内存空间,并且复制每个引用类型的成员变量,换而言之就是对整个对象图进行拷贝。

    浅拷贝与深拷贝的区别

    浅拷贝只是复制并传递地址引用,让多个对象指向相同的地址;而深拷贝直接连地址空间都全部复制过来。

    深拷贝原理图 浅拷贝原理图

    示例程序的运行结果:

    程序段1

    该段程序的运行结果为p1、p2的名字互不相同,而年龄相同,这是因为p1将引用指向了新的一个字符串,没有在原来的基础上做修改

    只是将原来指向摇头耶稣的指针修改为了指向“小傻瓜”的指针,因此p2的值不受影响;然而int类型是基本类型,需要值传递,所以修改年龄为99会导致统一修改的结果。

    三、浅拷贝的两种实现方法

    通过拷贝构造方法实现浅拷贝

    通过重写clone()方法进行浅拷贝(如图所示)

    四、深拷贝的两种实现方法

    通过clone方法实现

    通过序列化实现

    相关文章

      网友评论

          本文标题:2019-07-30 深拷贝和浅拷贝

          本文链接:https://www.haomeiwen.com/subject/dlunrctx.html