关于Java的clone()

本文探讨了Java中实现Cloneable接口与使用clone方法的基本原理。通过实例演示了浅复制与深复制的区别,展示了如何正确地进行对象复制,避免引用共享导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关要点:

1.必须实现Cloneable接口,这个接口只是一个标识;如果不实现,调用了clone(),运行时会报CloneNotSupportedException

2.clone是Object的方法,标识为protected,子类必须重写,标识符可改为public

3.对于jdk1.5,clone可以返回相应类的类型或Object;对于1.4,只能返回Object

4.注意深复制和浅复制

 

 

浅复制

(1)对于int,double,Double,String等基本类型,super.clone()是采用的深复制

 

 

结果:

a原值
a=12
b=hahaa
c=14.11
a现值
a=12
b=hahaa
c=14.11
b现值
a=13
b=hahab
c=15.11

(2)对其他类及自定义类,默认采用的是浅复制

结果:

a原值
a=12
b=hahaa
a现值
a=12
b=hahab
b现值
a=13
b=hahab

 

深复制

对于其中非基本类型的字段,必须明确进行其赋值

结果:

a原值
a=12
b=hahaa
a现值
a=12
b=hahaa
b现值
a=13
b=hahab

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值