天天看点

让你变身Offer收割机,谈谈对深克隆和浅克隆的理解-Java面试题解析。一个工作了5年的程序员私信我说:前几天去AL面

作者:Tom弹架构

让你变身Offer收割机,谈谈对深克隆和浅克隆的理解-Java面试题解析。

一个工作了5年的程序员私信我说:前几天去AL面试,被问到这样一个面试题,说谈谈你对深克隆和浅克隆的理解,那他的回答是深克隆是克隆值,浅克隆是克隆引用。当时他只说了这样一句话,回答以后,他看到面试官的表情很诧异,面试官也就没有继续深入提问了。

小伙伴们,如果是你来回答,你会这样回答吗?这位小伙伴的回答其实并没有错,只是说面试官觉得回答有点抽象而已,今天我就给大家详细聊一聊深克隆和浅克隆的区别。

另外,我花了一个多星期,把往期的面试题解析配套文档整理好了,想获取的小伙伴,可以在我的主页简介中找到。说到克隆,我还不得不说一个设计模式叫做原型模式。

那先来看原型模式的定义。原型模式的官方原文是这样的,大致意思就是指圆形的实际指定创建对象的种类,并且通过复制这些圆形去创建新的对象。其实复制、克隆、拷贝这些表达都是同一个意思,因为价格中的数据类型分为引用类型和值类型,因此在克隆数据的过程中就有了深克隆和浅克隆这么一说。

那么深克隆和浅克隆的本质区别又是什么?我规划为以下两点。

·第一点,看数据拷贝以后,两者之间是否有关联。

·第二点,就是改变一个值是否会影响到另外一个值的变化。

那么到底什么是深克隆?什么是浅克隆?现在看浅克隆,且跟头就是数据拷贝以后,一方数据变化以后,另一方数据也会跟着变化。如图所示,有一个圆形对象二倍且他是引用类型,然后拷贝以后产生两个克隆的像“objk 的一和objk 的二。此次他们克隆的都是objk的内存地址,因此objk的一和 objk的二都是指向objk的。

那么Object中成员变量值发全变化以后,obj1和obj2指向的成赏变量也会发生变化,实现浅克隆的常用的API有以下三种。

·第一种,是工具类BeanUtils和PropertyUtils。那么BeanUtils是Spring提供的,是commons包中提供的。

·第二种是实现taskmgb接口。

·第三种是taskmgb的copy Of()方法。

·下面来看深克隆。

深克隆就是数据拷贝以后,原型对象和克隆对象之间没有任何关联。如图所示,二百多几个一和二百几个二分别指向不同的原型对象。拷贝的是(Deep Clone),拷贝的是值而不是内存地址。

深克隆常用的API有五种,第一种就是重写clone()方法,第二种就是序列化,第三种就是ipagbrapics包中的搜身单机型taskmgb的一个clone()方法,第四种是细线的工具类,第五种是通过构造方法手动new对象。

以上就是我对浅克隆和深克隆的理解,我是被编程耽误的文艺Tom,如果我的分享对你有帮助,请你动动手指一键三连,分享给更多的人,关注我,面试不再难。

让你变身Offer收割机,谈谈对深克隆和浅克隆的理解-Java面试题解析。一个工作了5年的程序员私信我说:前几天去AL面
让你变身Offer收割机,谈谈对深克隆和浅克隆的理解-Java面试题解析。一个工作了5年的程序员私信我说:前几天去AL面
让你变身Offer收割机,谈谈对深克隆和浅克隆的理解-Java面试题解析。一个工作了5年的程序员私信我说:前几天去AL面
让你变身Offer收割机,谈谈对深克隆和浅克隆的理解-Java面试题解析。一个工作了5年的程序员私信我说:前几天去AL面

继续阅读