有关于Java List集合的深拷贝浅拷贝的知识

弦月 3小时前 44

菜鸟,随便分享一下。

 

其实最开始看名字,仅仅从字面上理解,我对于深拷贝和浅拷贝的理解是相反的。

我以为深拷贝是更深层次的拷贝,两个是一个相同的对象。但是其实是不对的。

深拷贝拷贝出来的对象是一个独立的对象。浅拷贝才是引用传递,它们用的是一个相同的地址,这才会导致,原有的对象被修改之后,浅拷贝出来的对象也会被跟着修改。

接下来请看例子:

// 创建 List 假设Student里面有一个名为Name的字段名。
List<Student> studentList = new ArrayList<>();
studentList.add(new Student("Tom"));

//浅拷贝studentList的第一个元素

Student stu = studentList.getFirst();

stu.setName("Amy");

这个时候不仅仅我们刚刚新写的对象Student stu里面的name被修改了。studentList里面的第一个元素同样也被修改了。

而深拷贝则不同,深拷贝出来的对象,修改其中的值之后,原来的studentList依然是保持不变的。

接下来请看例子:

// 创建 List 假设Student里面有一个名为Name的字段名。
List<Student> studentList = new ArrayList<>();
studentList.add(new Student("Tom"));

//通过new 一个新的对象来让获得一块新的内存地址,然后通过值传递的方式,进行深拷贝。
//这需要Student类有相应的拷贝构造函数,例如:
 public Student(Student other) {   // 拷贝构造函数
        this.name = other.name;       // 复制值
   }

//如果你的Student类没有拷贝构造函数,这个例子就不成立

//真正的深拷贝需要处理所有嵌套对象

Student copy = new Student(studentList.getFirst());

copy.setName("Amy");

这样修改的值就不会影响到原来的studentList了。

这就是有关Java 深拷贝浅拷贝的例子,关于对象类型的数据,都是适用的哦。

 

应该没有下期了,但是我还是说下期再见。

找快乐 先修课程 是要接受最差
最新回复 (2)
  • 弦月 3小时前
    0 2
    找快乐 先修课程 是要接受最差
  • 欧派兽 1小时前
    0 3
    换区了,奖励三
    1:管理员给你移区后会显示移到了你之前发帖的区。 2:点击我作为楼主发帖时一楼下的图片签名,可以跳转到站规教程贴。 3:多次水贴水回复会封号哦? 4:不知道回什么的时候就点“里世界专属”,一键随机生成几种回复内容。 5:祝你在里世界玩得愉快!
    • ACG里世界
      4
          
返回
发新帖