在 Java 编程中,深拷贝和浅拷贝是经常被谈到的话题,因为它们在不同的情况下会产生不同的结果。
浅拷贝只是复制了对象的引用,新对象和原对象共用同一个引用类型的变量,如果改变了引用类型变量的值,那么新对象和原对象都会受到影响。
public class User { private String name; private Listroles; public User(User original) { this.name = original.name; this.roles = original.roles; // 注意这里只是复制了引用 } }
而深拷贝会复制一份全新的对象,两个对象之间没有任何关联,修改新对象不会影响原对象,同时新对象中的引用类型变量所指向的地址也去生成了一个新的。
public class User { private String name; private Listroles; public User(User original) { this.name = original.name; this.roles = new ArrayList<>(original.roles); // 复制一份新的 List } }
一般我们使用深拷贝的场景是需要在对象之间共享数据,但是又不希望修改共享的数据会对其它对象造成影响。而浅拷贝主要适用于对象之间的传递,可以减少内存的消耗和提高效率。