深拷贝与浅拷贝的解释

发布时间:2024年01月16日

深拷贝和浅拷贝是关于对象复制的两个概念。它们描述了在复制对象时,复制的是对象本身还是对象的引用。

  • 浅拷贝是指在复制对象时,仅复制对象本身,而不复制对象引用的内容。也就是说,新对象和原对象共享相同的引用,修改其中一个对象的内容会影响到另一个对象。
  • 深拷贝是指在复制对象时,不仅复制对象本身,还复制对象引用的内容。也就是说,新对象和原对象拥有各自独立的引用和内容,修改一个对象的内容不会影响到另一个对象。
    下面通过一个示例来说明浅拷贝和深拷贝的区别:
import java.util.ArrayList;
import java.util.List;

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Person> originalList = new ArrayList<>();
        originalList.add(new Person("Alice"));
        originalList.add(new Person("Bob"));

        // 浅拷贝
        List<Person> shallowCopyList = new ArrayList<>(originalList);

        // 深拷贝
        List<Person> deepCopyList = new ArrayList<>();
        for (Person person : originalList) {
            deepCopyList.add(new Person(person.getName()));
        }

        // 修改原始对象的内容
        originalList.get(0).setName("Charlie");

        // 输出结果
        System.out.println("Original List: " + originalList.get(0).getName() + ", " + originalList.get(1).getName());
        System.out.println("Shallow Copy List: " + shallowCopyList.get(0).getName() + ", " + shallowCopyList.get(1).getName());
        System.out.println("Deep Copy List: " + deepCopyList.get(0).getName() + ", " + deepCopyList.get(1).getName());
    }
}

在这个示例中,我们创建了一个 Person 类,其中包含一个 name 属性。然后,我们创建了一个原始的 Person 对象列表 originalList,并将其复制到两个新的列表 shallowCopyList(浅拷贝)和 deepCopyList(深拷贝)中。
接下来,我们修改原始列表中的第一个 Person 对象的 name 属性为 “Charlie”。然后,我们分别输出三个列表中第一个 Person 对象的 name 属性。

输出结果如下:

Original List: Charlie, Bob
Shallow Copy List: Charlie, Bob
Deep Copy List: Alice, Bob

可以看到,浅拷贝的列表和原始列表共享相同的对象引用,因此修改一个对象的内容会影响到另一个对象。而深拷贝的列表则是完全独立的,修改一个对象的内容不会影响到其他对象。

在实际开发中,选择浅拷贝还是深拷贝取决于具体的需求。如果你需要复制的对象是不可变的,或者你希望复制的对象和原始对象共享相同的引用,那么浅拷贝可能是一个更好的选择。如果你希望复制的对象是独立的,修改一个对象的内容不会影响到其他对象,那么深拷贝可能更适合。

深拷贝与浅拷贝适用于任何对象或数据类型,深拷贝常用于对象、List、Map等。

文章来源:https://blog.csdn.net/weixin_51517879/article/details/135619991
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。