首先先了解一下内存
内存分为四个区域:栈区、堆区、静态区、只读区。
先看看这张图的
这里age是基本数据类型,存放在栈里,直接指向256这个值
而list是引用数据类型,存放在栈里,地址指向堆中的数据,指向”张三“ “李四” “王五”这些值
让我们了解一下什么是基本数据类型和引用数据类型?
1.基本数据类型:就是地址值类型,定义时直接在栈内存开辟一个空间。
2.引用类型:地址类型。
浅谈两者的关系:两者都是对象的拷贝
- 不同的是
1. 浅拷贝 :原理就是将数据的地址拷贝一份,可以说是数据的引用。拷贝副本和原本之间存在数据共享,当他们之间有某一个人的数据发生改动,由于这个数据是俩个对象一起共享的,另一个对象也会相应的改动。
2. 深拷贝:原理将对象的地址值拷贝一份,存在一个新的对象当中,新的对象存储在堆的另一个地址上。拷贝副本和原本之间不存在数据共享,也就是说,原本数据的改变,不会造成父辈数据的改变,副本数据的改变也不造成原本数据的改变。
1.java的clone()方法,将对象复制一份,实现的就是深拷贝
2.用json对象的方式(也是引用类型)来演示浅拷贝和深拷贝
json对象用的是深拷贝