关于clone()方法

关于clone()方法

在说明clone()方法之前,需要对值传递和引用传递有个初步的了解

关于此部分的说明,转载此文:https://www.cnblogs.com/binyue/p/3862276.htm
其中需要注意的是第三条
(1)基本数据类型传值,对形参的修改不会影响实参;
(2)引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影响到实际的对象;
(3)String, Integer, Double等immutable的类型特殊处理,可以理解为传值,最后的操作不会修改实参对象。(其本质上还是引用传递,只不过这些类型是不可变类,可以理解为传值)

在对值传递和引用传递有个初步了解之后,我们开始讲解clone()方法:
Java中所有的类都继承自Object类,而Object类有一个clone()方法,此方法的作用是返回一个Object对象的复制,这个复制返回的是一个新的对象而不是引用。

使用clone()方法的步骤:
1、实现clone的类首先需要继承Cloneable接口以,此接口是一个标识接口,没有任何接口方法
2、在类中重写Object类的clone()方法
3、在clone()方法中调用super.clone()

这样就可以得到实现clone类的的一个Object对象的复制,但这存在一个问题,如果这个类中还存在引用类型怎么办?在就要对浅复制和深复制说明一下了

浅复制和深复制:
使用场景:
1、类中的成员皆为基本数据类型,使用浅复制
2、类中的成员有引用类型(此时需注意String, Integer, Double等immutable的类型特殊看待,不当成引用类型),使用深复制
浅复制和深复制的使用依据实际情况而定

浅复制:被复制对象的所有变量都含有与原来对象相同的值,引用变量仍然指向原来的对象

深复制:被复制对象的所有变量都含有与原来对象相同的值引用,引用变量指向被复制对象的新变量

Object o = super.clone();  //执行浅复制
o.attr = this.getAttr().clone();  //对于引用类型的变量调用clone(),实现深复制
return o;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值