浅拷贝和深拷贝在Java中的应用实例

原创 小鱼儿 2024-12-10 17:00 83阅读 0赞

在Java中,当我们需要创建一个对象的新副本时,就会涉及到浅拷贝和深拷贝。

  1. 浅拷贝(Shallow Copy):
    • 对象的引用进行复制。
    • 当复制的对象引用的是同一个对象资源时,浅拷贝只复制了引用,并未复制对象本身。如果原始对象有变化,那么浅拷贝也会受到影响。

示例代码:

  1. List<String> list = new ArrayList<>();
  2. list.add("Element1");
  3. // 浅拷贝
  4. List<String> shallowCopy = new ArrayList<>(list);
  5. // 修改原始列表
  6. list.add("Element2");
  7. // 这时浅拷贝也受到影响,因为它是引用复制的
  8. System.out.println(shallowCopy); // 输出:[Element1, Element2]
  1. 深拷贝(Deep Copy):
    • 除了对象引用外,还需要递归地复制对象的所有属性和嵌套对象。

示例代码(深拷贝一个自定义对象的复杂情况):

  1. // 自定义对象
  2. class CustomObject {
  3. private String data;
  4. // 构造器
  5. CustomObject(String data) {
  6. this.data = data;
  7. }
  8. // 深拷贝方法
  9. CustomObject deepCopy() {
  10. return new CustomObject(this.data复制()); // 复制data字段
  11. }
  12. }
  13. // 测试深拷贝
  14. CustomObject original = new CustomObject("Original Data");
  15. CustomObject copied = original.deepCopy();
  16. System.out.println("Original Object: " + original);
  17. System.out.println("Copied Object: " + copied);
  18. // 比较原始和复制对象的数据
  19. if (original.data.equals(copied.data))) {
  20. System.out.println("Objects have same data after deep copy.");
  21. } else {
  22. System.out.println("Objects have different data after deep copy.");
  23. }

总结:
浅拷贝只是简单地复制了引用,而深拷贝则是递归地复制对象的所有属性和嵌套对象。根据具体需求选择合适的拷贝方式。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,83人围观)

还没有评论,来说两句吧...

相关阅读