浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。
深拷贝:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。
我想,还有很多人搞不清楚引用类型到底是什么意思,我来解释一下:
引用类型是指变量存储的是对象的地址(引用),而不是直接存储对象的值。引用类型变量指向堆内存中的对象。可以这么说,除了基本数据类型,剩下的都是引用类型。
那么String类型是不是引用类型呢?
String
类型是引用类型。尽管在 Java 中,String
对象的行为有些类似于基本类型(如不可变性),它依然是一个类(String
类的实例),因此是引用类型。String
存储的是指向堆中字符数组的引用,而不是字符本身。
那什么是引用拷贝呢?
简单来说,引用拷贝就是两个不同的引用指向同一个对象。
下面这一张图可以很清晰地描述浅拷贝、深拷贝、引用拷贝:
参考网站:Java 面试指南 | JavaGuide