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

java中的浅克隆和深克隆是什么

发布网友 发布时间:2022-05-01 10:26

我来回答

4个回答

热心网友 时间:2022-04-22 13:23

克隆是指克隆对象,在堆空间复制一块内存,是完全的两个对象,不是指针指向!浅克隆是指克隆一个对象,而该对象的属性只是基本数据类型,只克隆出该对象!深度克隆是指克隆的目标里面还有引用类型,引用类型里还有引用类型,同时把引用类型克隆出来叫深度克隆!常用的方法有两种,第一,需克隆的对象实现cloneable接口;第二,使用commons包提供的克隆方法。这两种方法都能实现深度克隆!

热心网友 时间:2022-04-22 14:41

浅克隆:仅仅复制所克隆的对象,而不复制它所引用的对象。

被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。


深克隆:把要复制的对象所引用的对象都复制了一遍。

那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象。


很明显二者时间消耗有差距,在不影响的情况下尽量用浅克隆

注意区分与C语言的浅克隆深克隆 那个是引用地址与重新分配地址构建的区别,详细可以参见:

http://www.cnblogs.com/yxnchinahlj/archive/2010/09/20/1831615.html

热心网友 时间:2022-04-22 16:16

深克隆与浅克隆
大家知道,对象是互相引用的,即对象中可能包含了另一个对象的引用,举例如:有一个Order对象,Order对象中又包含了LineItems对象,然后LineItems对象又包含了Item对象。
好了,现在我有一个Order对象order1,它包含了一个LineItems对象items,这表示的是有一个订单order1,订单的内容是items。
好的,现在有另一个客户想要一份订单,内容跟order1完全一样,那么在系统的逻辑层我们怎么做呢?很简单,order2=order1.clone().我们知道clone方法是在内存中生成一个新的对象,而不是只得到原对象的引用。这时候,有人说话了:“哦,明白了我们对order2的成员变量进行修改,是不会影响order1的。”很可惜,这句话只对了一半。
假设order类有一个成员变量name,当然改变order2.name不会影响order1.name,因为他们在不同的内存区域。但是如果改变order1.items呢?很遗憾,简单地使用order1.clone,是会影响到order2.items的。原因很简单,就是因为clone方法默认的是浅克隆,即不会克隆对象引用的对象,而只是简单地复制这个引用。所以在上例中,items对象在内存中只有一个,order1和order2都指向它,任何一个对象对它的修改都会影响另一个对象。
那相对浅克隆,深克隆自然就是会克隆对象引用的对象了。也就是说,在上例中,改变order1.items并不会影响order2.items了。因为内存中有两个一样的items。
如果实现深克隆?
一个方法自然是重写clone方法,添加如order.items=(LineItems)items.clone()的语句,也就是人为地添加对引用对象的复制。这个方法的缺点是如果引用对象有很多,或者说引用套引用很多重,那么太麻烦了。业界常用的方法是使用串行化然后反串行化的方法来实现深克隆。由于串行化后,对象写到流中,所有引用的对象都包含进来了,所以反串行化后,对等于生成了一个完全克隆的对象。绝!
这个方法的要求是对象(包括被引用对象)必须事先了Serializable接口,否则就要用transient关键字将其排除在复制过程中。

热心网友 时间:2022-04-22 18:07

浅克隆就是只能在本机识别的,深克隆就是其他平台也能识别的,这个需要用到序列化
java中的浅克隆和深克隆是什么

浅克隆是指克隆一个对象,而该对象的属性只是基本数据类型,只克隆出该对象!深度克隆是指克隆的目标里面还有引用类型,引用类型里还有引用类型,同时把引用类型克隆出来叫深度克隆!常用的方法有两种,第一,需克隆的对象实现cloneable接口;第二,使用commons包提供的克隆方法。这两种方法都能实现深度克隆!

浅拷贝.深拷贝

浅拷贝(影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用.深拷贝(深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生的.浅拷贝和深拷贝之间的区别:浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对...

彻底讲明白浅拷贝与深拷贝

深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的 。深拷贝和浅拷贝的示意图大致如下:浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。当我们把一个对象赋值给一...

java中深克隆与浅克隆的区别

A、你说的很对,无论是深克隆还是浅克隆都是克隆,既然是克隆就必然会产生一个全新的对象,这个全新的对象和原对象的保持一致性的深浅取决于克隆的深度。但需要始终明确的一点是克隆的对象与源对象没有任何关系,它在堆中是一个独立的实体,占据独立的内存地址,与原对象没有任何引用与指向关系。这个新...

什么是深拷贝和浅拷贝

浅拷贝就是指对象复制的时候只复制一层;深拷贝是指复制对象的所有层级。深拷贝和浅拷贝,主要是对象发生复制的时候,根据复制的层级不同来区分的。很多人在这里经常变量赋值发生混淆。对于JavaScript数组等复杂的数据类型来说,将其赋值给其它变量,其实只是复制了对象的地址给它,两个变量指向的是同一个...

java.util.ArrayList.clone是不是彻底的克隆

你好,官方api 说明如下:Returns a shallow copy of this ArrayList instance. (The elements themselves are not copied.)arraylist.clone是浅拷贝,浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的...

编程里面的深拷贝和浅拷贝各是什么意思,怎么理解这两个?

1、浅拷贝:默认的拷贝就是浅拷贝。 仅仅多了个指针指向原来的空间。2、深拷贝:自己写的拷贝,自己申请了动态内存空间,用了new 或 malloc 。不但多了指针,而且多了空间。3、用深拷贝的话,最好用自己写的析构,记得在里面释放内存,也可以用默认析构。4.用浅拷贝(即默认隐藏的拷贝),最好用...

浅拷贝与深拷贝的区别

简单的来说就是,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存,采用深拷贝的情况下,释放内存的时候就不会出现在浅拷贝时重复释放同一内存的错误!我列举一个例子来说吧:你正在编写C++程序中有时...

有没有更好的方式来创建在C#中深深浅浅的克隆

一、浅克隆:在浅克隆中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。简单来说,在浅克隆中,当对象被复制时只复制它本身和其中包含的值类型的成员变量,...

如何使Java中的InputStream的深层复制

我们知道在Java中存在这个接口Cloneable,实现该接口的类都会具备被拷贝的能力,同时拷贝是在内存中进行,在性能方面比我们直接通过new生成对象来的快,特别是在大对象的生成上,使得性能的提升非常明显。然而我们知道拷贝分为深拷贝和浅拷贝之分,但是浅拷贝存在对象属性拷贝不彻底问题。关于深拷贝、浅拷贝的...

Java 深克隆和浅克隆的区别 js浅克隆和深克隆的区别 深克隆与浅克隆的区别 java中的浅拷贝和深拷贝 深克隆与浅克隆 深克隆浅克隆方法 什么是深拷贝和浅拷贝 深拷贝和浅拷贝区别是什么 Java浅拷贝和深拷贝的区别
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
word里的表格怎么调整行高和列宽 怎样调整word表格的行高与列宽 一吨煤能发多少功率 微信不打开微信就收不到语音和视频提示怎么办? 微信来电不显示怎么办 ...公众号里添加文字连接?比如“点击报名”几个字,点进去就是一个报名... 顺丰快递笔记本电脑多少钱? 东莞市捷高电子材料有限公司公司简介 淘宝的购买记录保留多久? 为什么蜻蜓喜欢飞来飞去? 编菜单不会了,如何写成菜单 java中的深拷贝与浅拷贝问题 如何获得窗口菜单绘制区域的矩形 如何在 Unity Editor 中绘制自定义菜单 黑鲨手机,这个弧形的菜单,如何划出? 如何用visio 画出系统菜单 像素为320*240 基本工资调整 宁波市基本工资2021年标准制度 六年级下册英语菜单怎么画 河南省工资调整方案 二年级下册菜单设计图片怎么画 平湖最低工资标准2021 扬州最低工资标准2022 Excel中比如大于等于90为一等奖,大于80小于90为二等奖怎么用if函数表达 上海基本工资2020标准 用c语言怎样写一个if, x大于等于1小于等于2且不等于1.5? if函数大于等于且小于 多个条件是什么? excel 用if函数表示 大于等于100且小于等于199要怎么填?我填不对啊 辽宁省最低工资标准上调2021 if函数大于100小于200怎么表示 java clone 重新赋值就是深拷了吗 EntityFramework是否有数据库连接池概念 java深度拷贝和浅度拷贝的问题 如何在开始菜单中找到画图 Java浅拷贝和深拷贝的问题 java中的clone()方法怎么使用呢 java深拷贝和浅拷贝 java如何深度copy一个object? 有关java对象数组的clone问题 关于实现Java 深拷贝,程序老出错,请问应该怎样改??? java关于 克隆接口cloneable问题 java clone() 集有jǐ这个音吗?集是多音字吗?可以组什么词? 第一集的集是多音字吗 多音字组词!! 多音字锦集 攒的多音字怎样组词 (两个都写) 结字多音字组词 ADO.NET Entity Framework的支持厂商 shrc无人机h1app打开用不了