目录
1.浅拷贝
2.深拷贝
3.引用拷贝
4.代码示例
5.总结
浅拷贝、深拷贝和引用拷贝是在编程中用来 复制对象或数据 的三种不同方式。
1.浅拷贝
浅拷贝(Shallow Copy):浅拷贝创建一个新对象,其中包含原始对象的引用。这意味着新对象和原始对象将引用相同的内存地址,对其中一个对象的修改将影响到另一个对象。简而言之,浅拷贝只复制对象的引用,并没有复制对象本身。
2.深拷贝
深拷贝(Deep Copy):深拷贝创建一个新对象,并递归地复制原始对象及其所有嵌套对象。这意味着新对象和原始对象是完全独立的,修改一个对象不会影响到另一个对象。简而言之,深拷贝复制了整个对象及其引用对象。
3.引用拷贝
引用拷贝(Reference Copy):引用拷贝只是简单地将新变量指向原始对象的内存地址,而不创建新的对象。这意味着新旧变量都引用同一个对象,对其中一个变量的修改也会影响到另一个变量。
4.代码示例
// 假设有一个Person类
class Person {
public String name;
public Person(String name) {
this.name = name;
}
}
// 创建一个原始对象
Person original = new Person("Alice");
// 浅拷贝示例
Person shallowCopy = original;
shallowCopy.name = "Bob";
System.out.println(original.name); // 输出 "Bob",原始对象被修改
// 深拷贝示例
Person deepCopy = new Person(original.name);
deepCopy.name = "Charlie";
System.out.println(original.name); // 输出 "Bob",原始对象未被修改
// 引用拷贝示例
Person referenceCopy = original;
referenceCopy.name = "Dave";
System.out.println(original.name); // 输出 "Dave",原始对象被修改
5.总结
对于浅拷贝和引用拷贝来说,修改拷贝后的对象会影响到原始对象,而深拷贝则不会。因此,深拷贝是最为彻底的拷贝方式,可以创建独立的对象副本,而浅拷贝和引用拷贝只是创建了指向相同对象的新引用。