浅拷贝和深拷贝在Java中的应用实例
在Java中,当我们需要创建一个对象的新副本时,就会涉及到浅拷贝和深拷贝。
- 浅拷贝(Shallow Copy):
- 对象的引用进行复制。
- 当复制的对象引用的是同一个对象资源时,浅拷贝只复制了引用,并未复制对象本身。如果原始对象有变化,那么浅拷贝也会受到影响。
示例代码:
List<String> list = new ArrayList<>();
list.add("Element1");
// 浅拷贝
List<String> shallowCopy = new ArrayList<>(list);
// 修改原始列表
list.add("Element2");
// 这时浅拷贝也受到影响,因为它是引用复制的
System.out.println(shallowCopy); // 输出:[Element1, Element2]
- 深拷贝(Deep Copy):
- 除了对象引用外,还需要递归地复制对象的所有属性和嵌套对象。
示例代码(深拷贝一个自定义对象的复杂情况):
// 自定义对象
class CustomObject {
private String data;
// 构造器
CustomObject(String data) {
this.data = data;
}
// 深拷贝方法
CustomObject deepCopy() {
return new CustomObject(this.data复制()); // 复制data字段
}
}
// 测试深拷贝
CustomObject original = new CustomObject("Original Data");
CustomObject copied = original.deepCopy();
System.out.println("Original Object: " + original);
System.out.println("Copied Object: " + copied);
// 比较原始和复制对象的数据
if (original.data.equals(copied.data))) {
System.out.println("Objects have same data after deep copy.");
} else {
System.out.println("Objects have different data after deep copy.");
}
总结:
浅拷贝只是简单地复制了引用,而深拷贝则是递归地复制对象的所有属性和嵌套对象。根据具体需求选择合适的拷贝方式。
还没有评论,来说两句吧...