当前位置:   article > 正文

Java基础篇--浅拷贝和深拷贝_java深拷贝和浅拷贝

java深拷贝和浅拷贝

概念 

浅拷贝(Shallow Copy)和深拷贝(Deep Copy)是在对象复制过程中常用的概念。

  • 浅拷贝是指创建一个新对象,并将原始对象的非静态字段的值拷贝到新对象中。如果字段是基本数据类型,直接复制其值;如果字段是引用类型,复制的是引用而不是对象本身。因此,在浅拷贝中,新旧对象共享引用类型字段所指向的对象。
  • 深拷贝是指创建一个新对象,并将原始对象的所有字段的值拷贝到新对象中,包括引用类型字段所指向的对象。通过深拷贝,可以实现两个独立的对象,彼此之间没有任何关联。修改其中一个对象的字段值不会影响另一个对象的字段值。

选择使用浅拷贝还是深拷贝取决于实际需求。如果希望复制对象后的修改不会影响原始对象,应该使用深拷贝;如果可以接受复制对象的修改影响原始对象,或者对象较大且复制性能要求高,则可以使用浅拷贝。

综上所述:

  1. 浅拷贝:

    • 对于简单对象(如基本数据类型),直接复制其值。
    • 对于引用类型字段,复制其引用而不是对象本身。

    结果是,原始对象和复制对象之间共享相同的引用,对原始对象的修改会影响到复制对象,但是对于引用类型字段指向的对象本身的修改则不会影响。

  2. 深拷贝:

    • 对于简单对象和引用类型字段,分别递归地创建它们的独立副本,保证复制对象与原始对象完全独立。

    结果是,原始对象和复制对象之间没有任何引用关系,彼此独立存在,修改其中一个对象不会影响另一个对象。

可以这么理解,从A这里复制出来了一个B,此时我修改了A的对象,而B的对象也跟着改变,这则是浅拷贝。相反,我修改了A的对象,而B的对象不跟着改变,这便是深拷贝。

示例代码:

  1. //创建一个类Person
  2. class Person {
  3. String name;
  4. int age;
  5. // 构造函数
  6. public Person(String name, int age) {
  7. this.name = name;
  8. this.age = age;
  9. }
  10. // 重写toString方法
  11. @Override
  12. public String toString() {
  13. return "Person [name=" + name + ", age=" + age + "]";
  14. }
  15. }
  16. public class myclass {
  17. public static void main(String[] args) {
  18. // 创建一个Person对象
  19. Person person1 = new Person("John", 25);
  20. // 浅拷贝示例
  21. Person person2 = person1; // 直接将person1的引用赋值给person2
  22. person2.age = 30; // 修改person2的属性,也会影响到person1
  23. System.out.println("浅拷贝示例:");
  24. System.out.println("person1: " + person1);//运行结果:person1: Person [name=John, age=30]
  25. System.out.println("person2: " + person2);//运行结果:person2: Person [name=John, age=30]
  26. // 深拷贝示例
  27. Person person3 = new Person(person1.name, person1.age); // 创建新的Person对象,将person1的属性值复制给person3
  28. person3.age = 35; // 修改person3的属性,不会影响到person1
  29. System.out.println("深拷贝示例:");
  30. System.out.println("person1: " + person1);//运行结果:person1: Person [name=John, age=30]
  31. System.out.println("person3: " + person3);//运行结果:person3: Person [name=John, age=35]
  32. }
  33. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/616684
推荐阅读
相关标签
  

闽ICP备14008679号