首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一文了解Java对象的克隆深浅拷贝(克隆

一、什么是对象的克隆? 在Java的Object类中,有一个方法名为clone(),直译过来就是克隆,核心概念就是复制对象并返回一个新的对象。...(1)在要实现克隆的对象类中实现Cloneable接口。 为啥?...三、测试(浅克隆) 按照前面官方文档提到的,clone通常是一个浅拷贝,如果要做到深拷贝,需要对复制对象中的对象引用进行修改,换句话说就是浅拷贝的效果就是引用例行的属性无法完全复制,被克隆对象和克隆对象中的该引用类型的属性指向同一个引用...浅拷贝的情况下,原被克隆对象发生变化后,克隆对象的基本数据类型和不可变引用数据类型(String)的数据未发生影响,而cp字段为可变的应用类型,可以观察到克隆对象的内容随着被克隆对象的变化发生了同样的变化...列出以下几种常见的方式: (1)clone函数的嵌套调用 既然引用类型无法被完全克隆,那么我们可以考虑在引用类型所在的类也实现Cloneable接口,在外层User类的clone方法调用属性的克隆方法。

3.1K40

聊一下深浅克隆的那些要点

聊一下深/浅克隆的那些要点什么是克隆?它的作用?Clone,克隆的意思,即通过克隆来获取与源体一样的新个体。还记得初中生物课本上的多利羊吗?...,为引用数据类型的成员变量的引用地址复制给克隆对象。...深克隆克隆:与浅克隆相比,将引用数据类型所引用的对象也都会复制一份。...实现深克隆的方法:所有对象都实现克隆方法;通过构造方法实现深克隆;使用 JDK 自带的字节流实现深克隆;实现浅克隆,代码实战实现Cloneable接口,并且必须重写clone方法,因为clone方法被protected...没错,不过它是不可变的,在《Effective Java》(原书第3版)中有这样一句话:“不可变类永远都不应该提供克隆方法,因为它只会激发不必要的克隆。”

32730
您找到你想要的搜索结果了吗?
是的
没有找到

JS深浅复制

❝焦虑很多时候就是因为想的太多 ❞ 简明扼要 JS在语言层面「仅支持浅复制」,深复制需要手动实现 instanceof 判断的是 a和A是否有「血缘关系」 扩展运算符在副本中「直接定义新的属性」 Object.assign...浅复制 VS 深复制 针对JS引用类型数据(复杂数据)的复制,有两种处理模式。...❝JS在语言层面「仅支持浅复制」,深复制需要手动实现 ❞ ---- 2. 浅谈浅复制 在JS中,存在几个内置属性天然支持数据浅复制,但是每个属性都有一定的适用条件和范围。...let ar = []; ar instanceof Array // true ar instanceof Object // true 我们在JS篇之数据类型那些事儿中有过对这方面的介绍,感兴趣可以自行查阅...扩展运算符不能复制内置对象的特殊属性 我们在前面介绍JS数据类型的时候,介绍了在浏览器宿主环境下,JS = ECMAScript + DOM + BOM。

4.1K20

深浅克隆面试题汇总——附详细答案

在开始学习深克隆和浅克隆之前,我们先来看下面代码,有什么问题?...以上这种复制方式叫做浅克隆。 浅克隆的实现条件:需要克隆的对象必须实现 Cloneable 接口,并重写 clone() 方法,即可实现对此对象的克隆。...要处理引用类型不被复制的问题,就要使用到深克隆。 二、深克隆 定义:深克隆就是复制整个对象信息,包含值类型和引用类型。 深克隆的实现方式通常包含以下两种。...所有引用类型都实现克隆:要复制对象的所有引用类型都要实现克隆,所有对象都是复制的新对象,从而实现了深克隆。...四、总结 调用 Object 类中的 clone() 方法默认是浅克隆,浅克隆只能复制值类型,不能复制引用类型,因此更多的场景下我们需要深克隆,深克隆通常的实现方式有两种:序列化方式或把所有的引用类型都实现克隆

38630

JS完美收官之浅克隆和深克隆

1996年7月5日,在英国爱丁堡市罗斯林研究所出生了一只克隆羊多莉,克隆英文名"clone",clone起源于希腊文"klone",也称为无性繁殖,克隆是生物体通过体细胞进行无性繁殖,最终形成基因完全相同的后代...,多莉与多塞特母绵羊具有完全相同的外貌,而我们程序中的克隆跟这类似,就是把一个对象中的属性复制一份放到另一个对象中。...浅克隆 什么是浅克隆?浅克隆就是当我把obj{}对象里面的所有属性拷贝到obj1{}中后,然后我分别改变对象里面的变量,原始值互不影响,引用值一个改变,另一个跟着变。...return target; } clone(obj, obj1); 当引用值修改时: 从执行结果可以看出修改原始值时互不影响,一旦修改引用值时,一个改,另一个跟着变,这就是浅克隆...深克隆(主要) 那什么是深克隆呢?深克隆就是修改引用值时,互不影响,你改我不变。

1.3K20

JS面试题】深克隆 和 浅克隆 有了解过吗?能手写深克隆吗?

克隆 和 浅克隆 有了解过吗?能手写深克隆吗? 什么是克隆克隆其实就是拷贝,就是把一个对象中的属性复制一份,放到另一个对象中的过程。而属性的数据是有原始值和引用值之分。...浅克隆:当我们复制对象中属性的时候,如果是原始值,则两个对象中的变量随意修改,两者互不影响(敌动我不动)。如果是引用值,一个对象的变量改变,则另一个对象跟着变(敌动我便动)。...深克隆:深克隆就是解决拷贝引用值时“敌动我便动”的问题,无论数据怎么修改,两者互不影响。...深克隆的实现有两种方式:递归拷贝和JSON函数拷贝,我会用这两种方式分别来实现深拷贝 递归拷贝:将obj克隆到newObj中 let obj = { name: "前端猎手",...} } return target; } deepClone(obj,newObj) 代码验证: JSON函数拷贝:将obj克隆

1.5K10

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券