赋值浅拷贝深拷贝的区别有哪些?
我用java实例来给你演示一下:
//头class Head{}
//身体class Body{}
//脚class Footer{}
//人class Person{
String name;
Head head;
Body body;
Footer footer;
}
赋值Person myself = new Person(); //创建一个我自己
Person son = myself ; //我是我妈妈的儿子【引用】
Person husband = myself ; //我是我老婆的老公【引用】
上面三个变量: myself、son 、husband 都是指代我自己,我在现实中只有一个,所以三个变量引用的是同一个对象(这儿是人),变量相当于称呼
浅拷贝Person myself = new Person(); //创建一个我自己
Person copy = new Person(); //创建一个副本
copy.head
= myself.head;copy.body
= myself.body;copy.footer
= myself.footer;myself和copy引用的不是同一个对象,但是myself中的属性引用的是同一个,即: 共用了head、body、footer
很明显浅拷贝容易引起很多问题。2个对象不同,但是对象的属性引用相同
深拷贝Person myself = new Person(); //创建一个我自己
Person deepCopy = new Person(); //创建一个副本
myself 与deepCopy两个对象不同(引用地址不同)
并且两个对象中的属性name、head、body、footer都不同。