聚合类的深拷贝和浅拷贝
深拷贝与浅拷贝
深拷贝:
深拷贝会拷贝所有的属性,并拷贝属性所指向的动态分配的内存。当对象和它引用的对象一起拷贝时就发生了深拷贝
实现深拷贝
public class Subject {
private String name;
public Subject(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class Student implements Cloneable {
//对象引用
private Subject subj;
private String name;
public Student(String s, String sub) {
this.subj = new Subject(sub);
this.name = s;
}
public Subject getSubj() {
return subj;
}
public void setSubj(Subject subj) {
this.subj = subj;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//重写clone方法
public Object clone(){
//浅拷贝
Student student = new Student(name, subj.getName());
return student;
}
}
————————————————
版权声明:本文为CSDN博主「墨玉浮白」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36299025/article/details/89405338
浅拷贝:
它会创建一个新的对象,该对象有原始对象属性值的备份。如果属性是基本类型,拷贝的就是基本类型的值。如果属性是内存地址,拷贝的就是内存地址。如果其中的一个对象改变了这个地址,另一个对象也会受牵连。
实现浅拷贝
public class Subject{
private String name;
public Subject(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}
public class Student implements Cloneable {
//对象引用
private Subject subj;
private String name;
public Student(String s, String sub) {
this.subj = new Subject(sub);
this.name = s;
}
public Subject getSubj() {
return subj;
}
public void setSubj(Subject subj) {
this.subj = subj;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//重写clone方法
public Object clone(){
//浅拷贝
try {
//直接调用父类clone方法
return super.clone();
}catch (CloneNotSupportedException e){
return null;
}
}
}
}
————————————————
版权声明:本文为CSDN博主「墨玉浮白」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36299025/article/details/89405338