项目场景:
我们在写代码的时候经常会出现一种情况:你改变了一个变量的值,但是另一个变量的值也跟着改变了,而有时候不会。
解释
这时候有产生了一个问题,他什么时候会改变,什么时候不会改变。
这时候就引入了两个概念:
深拷贝:深拷贝就是你的数据和内存地址都拷贝一份。举个例子:比如说你现在需要去打印一个身份证复印件,但是你没有直接去打印,而是去让别人做了一个和你身份证一模一样的身份证去打印的,这就是深拷贝啦
浅拷贝:浅拷贝就是只是给数据拷贝一份,内存地址并没有拷贝,所以用的同一块内存。举个例子:比如你还是要身份证复印件,你直接拿原本的身份证去打印了,这就是浅拷贝
他们两个的区别是,一个去做了一个身份证,一个没有做。这时候你需要更改身份证上的东西,深拷贝就会改变他做出来的模型,而浅拷贝则直接就用了原有的身份证,你再用你的身份证去打印的时候,就会发现,打印出来的是改变后的样子
一般的情况来说 , 值类型都是浅拷贝,引用类型为深拷贝
但是这就引出一种情况 , 结构体中的引用类型,下面是测试
我在结构体里测试了两种引用类型 字符串和数组
数组只要不去new 直接改变数组中的某一个值,他是浅拷贝,new的话大家应该知道会在内存中开辟内存,所以就是浅拷贝了
但是string这个就有点意思
他相当于是一个常量,和数组一样为固定长度,你改变字符串他就重新创建一个,虽然说string不能去new但是他相当于有一个隐式去new的过程。
OK,结束,再见