浅拷贝和深拷贝

146 阅读1分钟

首先先了解一下内存

内存分为四个区域:栈区、堆区、静态区、只读区。

先看看这张图的

image.png

这里age是基本数据类型,存放在栈里,直接指向256这个值

而list是引用数据类型,存放在栈里,地址指向堆中的数据,指向”张三“ “李四” “王五”这些值

让我们了解一下什么是基本数据类型和引用数据类型?

1.基本数据类型:就是地址值类型,定义时直接在栈内存开辟一个空间。

2.引用类型:地址类型。

浅谈两者的关系:两者都是对象的拷贝

  • 不同的是

1. 浅拷贝原理就是将数据的地址拷贝一份,可以说是数据的引用。拷贝副本和原本之间存在数据共享,当他们之间有某一个人的数据发生改动,由于这个数据是俩个对象一起共享的,另一个对象也会相应的改动。

2. 深拷贝原理将对象的地址值拷贝一份,存在一个新的对象当中,新的对象存储在堆的另一个地址上。拷贝副本和原本之间不存在数据共享,也就是说,原本数据的改变,不会造成父辈数据的改变,副本数据的改变也不造成原本数据的改变。

1.java的clone()方法,将对象复制一份,实现的就是深拷贝

2.用json对象的方式(也是引用类型)来演示浅拷贝和深拷贝

json对象用的是深拷贝

image.png