菜鸟,随便分享一下。
其实最开始看名字,仅仅从字面上理解,我对于深拷贝和浅拷贝的理解是相反的。
我以为深拷贝是更深层次的拷贝,两个是一个相同的对象。但是其实是不对的。
深拷贝拷贝出来的对象是一个独立的对象。浅拷贝才是引用传递,它们用的是一个相同的地址,这才会导致,原有的对象被修改之后,浅拷贝出来的对象也会被跟着修改。
接下来请看例子:
// 创建 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 深拷贝浅拷贝的例子,关于对象类型的数据,都是适用的哦。
应该没有下期了,但是我还是说下期再见。
找快乐 先修课程 是要接受最差