问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java如何实现对象的深克隆?

发布网友 发布时间:2023-06-10 02:47

我来回答

1个回答

热心网友 时间:2023-11-28 14:47




/**定义用户**/

publicclassUser{

privateStringname;

privateAddressaddress;

//constructors,gettersandsetters

}

/**地址**/

publicclassAddress{

privateStringcity;

privateStringcountry;

//constructors,gettersandsetters

}

重载clone()方法

Object父类有个clone()的拷贝方法,不过它是protected类型的,

我们需要重写它并修改为public类型。

除此之外,子类还需要实现Cloneable接口来告诉JVM这个类是可以拷贝的。

重写代码

让我们修改一下User类,Address类,实现Cloneable接口,使其支持深拷贝。

/**

*地址

*/

publicclassAddressimplementsCloneable{

privateStringcity;

privateStringcountry;

//constructors,gettersandsetters

@Override

publicAddressclone()throwsCloneNotSupportedException{

return(Address)super.clone();

}

}

/**

*用户

*/

publicclassUserimplementsCloneable{

privateStringname;

privateAddressaddress;

//constructors,gettersandsetters

@Override

publicUserclone()throwsCloneNotSupportedException{

Useruser=(User)super.clone();

user.setAddress(this.address.clone());

returnuser;

}

}

需要注意的是,super.clone()其实是浅拷贝,

所以在重写User类的clone()方法时,address对象需要调用address.clone()重新赋值。



扩展:

为什么要克隆?

大家先思考一个问题,为什么需要克隆对象?直接new一个对象不行吗?

答案是:克隆的对象可能包含一些已经修改过的属性,而new出来的对象的属性都还是初始化时候的值,所以当需要一个新的对象来保存当前对象的“状态”就靠clone方法了。那么我把这个对象的临时属性一个一个的赋值给我新new的对象不也行嘛?可以是可以,但是一来麻烦不说,二来,大家通过上面的源码都发现了clone是一个native方法,就是快啊,在底层实现的。

提个醒,我们常见的Objecta=newObject();Objectb;b=a;这种形式的代码复制的是引用,即对象在内存中的地址,a和b对象仍然指向了同一个对象。

而通过clone方法赋值的对象跟原来的对象时同时独立存在的。


声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机壁纸花卉红色手机壁纸花卉 辽宁智能五芯防水连接器 军工产品浅谈——航空插头 xp电脑系统修复XP系统怎么恢复出厂设置 ...表编辑器后打不开任何文件,无需重装系统,电脑盲都能用 粼基本信息 粼五笔怎样打? 【微科普】想变成光?先搞清楚光是什么吧! 手机被拉黑后打电话是什么提示? 物流管理专业对数学的要求高么 如何评价刀郎新专辑《弹词话本》? 刀郎瓜洲渡歌词表达的意思? 买来的日立320G移动硬盘是NTFS,想转FAT32却在磁盘管理里面没得选... 360借条利率多少 家用电饭煲烧不熟饭怎么办 电饭煲饭没熟怎么办 做梦梦见背着沉重东西艰难行走是什么征兆 手机丢了微信怎么登录 教你找回 手机掉了,怎么才能找回来! 几种活动合在一起叫什么 《自然之道》一文中写道“人是万物之灵,然而,当人自作聪明时,一切都可... 能不能给我介绍点比较适合体育舞蹈44拍的音乐啊? 一年怎样长高10厘米? 一年长高10厘米的方法有吗? 厦门运友物流可靠吗 恩德的诗词恩德的诗词是什么 恩施的解释恩施的解释是什么 施仁布德的解释 悄郊原带郭的翻译是什么 手机丢了微信怎么登录 教你找回 java 声明两个对象,指向一个引用,然后一个对象改变属性,另一个对象的... 女反是什么意思 微信如何换成深色模式 怎样将EXCEL表格中数据小数点后2位以后的数去掉_百度问一问 员工与领导和员工与老板相处有什么区别?要如何对待? web3网络费用估算失败怎么办 web3钱包收不了币怎么回事 剑网三 求反(返)是啥意思? 求指点。。 请问怎样在WIN7的系统里做个虚拟机啊,最好是有教程的 如何在b站隐藏自己的视频? 惮怎么读 详解惮字的发音和意义? 天津枫叶国际学校高中招生条件 中澳国际学校招生要求 南宁国际学校招生条件 天津英华国际学校2023招生条件是什么 全车人员意外险多少钱? 买汽车票一般买10元意外险吗多少钱 网易实况足球手游哪个工作室 实况足球手游大更新时间 实况足球23什么时候出单机