美文网首页
浅析深浅拷贝

浅析深浅拷贝

作者: 奔跑之咸鱼 | 来源:发表于2022-05-21 16:36 被阅读0次

数据类型

数据类型分为基本数据类型(8种基本类型,String不算。有些人喜欢把 void 也算上,其实严格意义上来说,是不算的)和引用数据类型

基本数据类型一般存在栈中,但如果你要细究基本数据类型就一定会放在栈吗?那也不对,这个要看你在哪里声明,局部变量放在栈中,静态变量和实例变量放在堆中

引用数据类型栈中存的是该对象的引用,真实的数据存放在堆中。其中String类型非常特殊,属于引用类型,但是String类型的数据是存放在常量池中,无法修改(加了final)

应用场景

在了解这两个东西是什么之前,还是先看一下用在哪吧。深拷贝和浅拷贝只针对 对象数组这样的引用类型

什么是浅拷贝?

浅拷贝是会将对象的每个属性进行依次复制,但是当对象的属性值是引用类型时,实质复制的是其引用,当引用指向的值改变时也会跟着变化

简单来说,浅拷贝只会复制某个对象的指针,新旧对象还是共享一块内存

什么是深拷贝?

深拷贝复制变量值,对于引用数据,则递归至基本类型后,再复制。深拷贝后的对象与原来的对象是完全隔离的

简单来说,深拷贝会创建一个一模一样的对象,新旧对象不共享内存,修改新对象不会影响旧对象

为什么要使用深拷贝?

我们希望在改变新的数组或对象的时候,不改变原数组或对象就会用到

浅拷贝和深拷贝的区别?

举个例子,我有一个对象A,这个对象A中还嵌套了一个对象,我现在有一个对象B,A和B的结构完全一样,现在我把B赋给A。如果是浅拷贝,B会影响到A中的嵌套对象;如果是深拷贝则不会影响到A中的嵌套对象

实际应用

其实深拷贝经常会被用到,只是我不知道而已,new一个对象把他赋给另一个结构相同的对象就用到了深拷贝

而深拷贝效率比浅拷贝要低,因为浅拷贝只拷贝顶层数据,花费内存更少。SysDataCenterItem这个类中不可能去嵌套类,也不会在里面加数组,所以这段代码实际上会有性能问题,要考虑用浅拷贝替代深拷贝

其实我又想到了一个应用场景,是关于前台的,后台返回状态1 2 3,这些数字在前台展示的时候要赋予具体含义,比如说未支付,已支付,已完成。我现在希望展示的时候有具体的含义,在代码中我还是使用1 2 3做逻辑判断,那怎么办呢?用深拷贝啊

结语

这两年里我把市面上几乎所有的热门技术都看了一遍,正当我满以为技术债补完的时候,发现基础打得还是不够牢固,看来有时间还是要再回头看看基础

相关文章

  • 浅析深浅拷贝

    数据类型 数据类型分为基本数据类型(8种基本类型,String不算。有些人喜欢把 void 也算上,其实严格意义上...

  • 2018-08-29

    深浅拷贝 1.根据拷贝内容的不同,分为深浅拷贝 深拷贝:内容...

  • js的深浅拷贝

    js的深浅拷贝可以分为数组的深浅拷贝和对象的深浅拷贝 一、数组的深浅拷贝如果只是简单的将数组中的元素付给另外一个数...

  • Python—浅拷贝与深拷贝

    浅拷贝 深拷贝 深浅拷贝的作用

  • 深浅拷贝

    先来了解一下这些:在js中变量类型基本分为两种:基本数据类型和引用数据类型;基本类型:Underfied Null...

  • 深浅拷贝

    浅拷贝是对一个对象的顶层拷贝。通俗的理解就是:拷贝了引用,并没有拷贝内容。 深拷贝是对于一个对象所有层次的拷贝(递...

  • 深浅拷贝

    深浅拷贝.copy 浅拷贝 这是一个方法,浅拷贝修改可变类型是会将原数据也一块修改 Copy.deepcopy 深...

  • 深浅拷贝

    1:is 和 ==的区别 is 是比较两个引用是否指向了同一个对象(地址引用比较)。== 是比较两个对象是否相等。...

  • 深浅拷贝

    函数的传递,与matlab不同,具有以下特点: 1.直接赋值会带来不同ID,例如,a=2,b=2 2.传递引用赋值...

  • 深浅拷贝

    最近一直被问到深浅拷贝的问题。自己也确实不太清楚怎么回事,现在来研究一下。 什么是深浅拷贝 浅拷贝:指针拷贝,不会...

网友评论

      本文标题:浅析深浅拷贝

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