最近面试的时候发现有一道面试题,“说下你了解的java浅克隆与深克隆的区别”,后台专门去网上找了一些相关的博客和自己的理解进行比较,现在列出来,供大家参考。
现在说下浅克隆:浅克隆就是对一些表面看到的值进行拷贝。比如:
1.设置两个Integer a,b。然后a复制并吧b复制给a 结果a得到值
2.userVO对象创建并且复制在创建一个userVo对象充血clone方法打印出来,这种相当于重新复制一个对象。
这种叫做浅克隆
下面附上userVo对象代码
重写clone方法必须实现cloneable接口重写。getset就没有复制了,地方有限。
总结:浅克隆就是对对象对或者定义对值进行拷贝,并且内存地址不变。
2.深克隆
下面给大家看下深克隆的理解。
深克隆的实现方式我知道有两种
1.通过重写clone方法来实现深拷贝,但是缺点是如果你的对象中包含多个对象,那你每个对象都要重写,比较慢,切耗费时间较长
2.通过序列化,来实现。
深克隆是对对象或者定义对值进行拷贝,并且内存地址改变。