这段时间在复习 JAVA 基础知识,看到浅拷贝vs深拷贝时,感觉描述不够详细,于是搜索这部分资料。

查阅后发现事情不简单。

浅拷贝的内存关系,JavaGuide的配图与资料中的配图不完全一致:

deep and shallow copy

image-20201217002917565

实际上,前者 Original/Cloned Object 指的是堆内存对象实例,其配图并不准确。

具体来说,浅拷贝新对象和原对象不等,但是新对象的属性和老对象相同

  • 如果属性是基本类型(int,double,long,boolean等),拷贝的就是基本类型的值;
  • 如果属性是引用类型,拷贝的就是内存地址(即复制引用,但不复制引用的对象) ,因此如果其中一个对象改变了这个地址,就会影响到另一个对象

参考https://segmentfault.com/a/1190000038523408