大厂面试题:浅拷贝是什么?

浅拷贝是什么

浅拷贝(shallow copy)是对象复制的一种方式,复制过程仅复制对象本身的顶层属性或引用,而不递归复制其内部引用的可变对象。

大厂面试题:浅拷贝是什么?-mikechen

对于包含不可变值(如数字、字符串、布尔值)的字段,浅拷贝会创建独立的副本。

但对于引用类型的字段(如数组、字典、对象、列表等),浅拷贝只是复制引用,使源对象和副本共享相同的子对象。

 

深拷贝有什么价值

浅拷贝常用于需要高效地复制对象结构,但又不必完全独立深层数据的场景,其主要作用包括:

大厂面试题:浅拷贝是什么?-mikechen

提高性能与节省内存:复制成本低,适合大型对象或频繁复制的情况。

保持结构一致性:允许多个对象共享不可变或无需独立管理的子对象。

便于对顶层数据进行局部修改:可以在不改变原对象顶层引用的情况下,安全地修改副本的顶层字段。

 

深拷贝实现原理

浅拷贝的本质是内存地址的复制:

 

class User implements Cloneable {
    String name;
    Address address;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone(); // 浅拷贝
    }
}

在计算机内存中,数据存储分为“栈”和“堆”:

基本类型直接存放在栈中,引用类型的值存放在堆中,而栈中只存放指向堆的地址(指针)。

执行浅拷贝时,程序会在栈中开辟一块新空间给新对象。

然后遍历原对象,把值依次填入新对象。

遇到指针时,它直接复制那个指针地址,而不是去堆里复制一份完整的数据。

mikechen睿哥

10年+一线大厂架构实战经验,操盘多个亿级大厂核心项目,就职于阿里、淘宝等一线大厂。

评论交流
    说说你的看法