聚合类的深拷贝和浅拷贝

聚合类的深拷贝和浅拷贝

深拷贝与浅拷贝

深拷贝:

深拷贝会拷贝所有的属性,并拷贝属性所指向的动态分配的内存。当对象和它引用的对象一起拷贝时就发生了深拷贝

实现深拷贝
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值