深克隆和浅克隆

  • 浅克隆:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。(如果对克隆出来的对象进行属性修改,那么原对象的属性也会发生相应的改变)
  • 深克隆:被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。
  • clone方法是Object类的,并不是Cloneable接口的,Cloneable只是一个标记接口,标记接口是用用户标记实现该接口的类具有某种该接口标记的功能,常见的标记接口有三个:Serializable、Cloneable、RandomAccess,没有实现Cloneable接口,那么调用clone方法就会爆出CloneNotSupportedException异常。
    • 实现浅克隆:虽然创造出了1个新的对象,但新对象和原始对象的引用指向同一堆内存区域(只是复制了引用,而没有复制内存)
      • 对象的类实现Cloneable接口;
      • 覆盖Object类的clone()方法 (覆盖clone()方法,访问修饰符设为public,默认是protected);
      • 在clone()方法中调用super.clone();super.clone() 的浅复制效果是通过Object.clone()实现的
    • 实现深克隆
      • (序列化和反序列化,实现Serializable接口)
      • 对象的类实现Cloneable接口;覆盖Object类的clone()方法 (覆盖clone()方法,访问修饰符设为public,默认是protected);在clone()方法中对所有成员变量都进行创建,复值;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值