JAVA深克隆与浅克隆1】的更多相关文章

复制就是得到一个副本 克隆就是复制一个对象的复本.但一个对象中可能有基本数据类型,如:int,long,float    等,也同时含有非基本数据类型如(数组,集合等)被克隆得到的对象基本类型的值修改了,原对象的值不会改变.这种适合shadow clone(浅克隆). 但如果你要改变一个非基本类型的值时,原对象的值却改变了.比如一个数组,内存中只copy他的地址,而这个地址指向的值并没有copy,当clone时,两个地址指向了一个值,这样一旦这个值改变了,原来的值当然也变了,因为他们共用一个值.…
2015.9.19 6:45   星期五    1…
java深克隆和浅克隆 基本概念 浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所拷贝的对象,而不复制它所引用的对象. 深复制(深克隆) 被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量.那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象.换言之,深复制把要复制的对象所引用的对象都复制了一遍. 实现java深复制和浅复制的最关键的就是要实现Object中的cl…
克隆,就是复制一个对象的副本,而克隆又分浅克隆和深克隆.浅克隆是指克隆得到的对象基本类型的值改变了,而源对象的值不会变.但如果被克隆对象引用类型的值改变了,那么源对象的值同样会改变,因为引用类型在栈内存中存放的是一个引用地址,被克隆对象后也和源对象的引用地址一样,都是指向同样的内存空间的值.所以在克隆时,任何一个对象的值的改变都会令另外的值改变,所以这种情况下要用深克隆. 要注意的是要克隆的对象的泪必须继承cloneable接口.浅克隆的特点是只克隆该对象本体,它的优缺点就是一改皆改:深克隆的特…
为什么要克隆 首先思考一个问题, 为什么需要克隆对象? 直接new一个对象不行吗? 克隆的对象可能包含一些已经修改过的属性, 而new出来的对象的属性都还是初始化时候的值, 所以当需要一个新的对象来保存当前对象的"状态"时就要靠克隆了. 当然, 把对象的属性一个一个的赋值给新new的对象也是可以的, 但是这样一来麻烦不说, 二来, 我们通过源码查看 Object的clone方法是一个native方法(native方法是非Java语言实现的代码, 供Java程序调用, 要想访问比较底层的…
在最近的秋招中,阿里和多益网络都问到了这个问题,虽然很简单,但是我还是想总结一下,感兴趣的可以看一下我的个人博客网站(Spring+MyBatis+redis+nginx+mysql)(适合菜鸟),最近会抽空把最近面试遇到的问题总结一下. 本文针对问题:深克隆和浅克隆的区别和实现方式?(阿里电面,多益网络的选择题) Talk is cheap 最近不止一次遇见深浅克隆(深复制,浅复制)的问题,除了印象中有个clone方法外一脸懵逼!!!克隆(复制)在Java中是一种常见的操作,目的是快速获取一个…
Java支持我们对一个对象进行克隆,通常用在装饰模式和原型模式中.那么什么是深克隆,什么是浅克隆呢. [浅克隆],通常只是对克隆的实例进行复制,但里面的其他子对象,都是共用的. [深克隆],克隆的时候会复制它的子对象的引用,里面所有的变量和子对象都是又额外拷贝了一份. 下面的两个例子可以很好的说明他们的区别: 首先看一下类图 Husband类有一个对wife的引用,当进行浅克隆的时,wife变量都会指向同一个Wife:而进行深克隆时,会指向不同的Wife.下面进行一下验证: [浅克隆] publ…
为什么需要克隆      在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能会需要一个和A完全相同新对象B, 并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的.在Java语言中,用简单的赋值语句是不 能满足这种需求的,要满足这种需求有很多途径.       克隆的实现方式       一.浅度克隆            浅度克隆对于要克隆的对象,对于其基本数据类型的属性,复制一份给新产生的对…
JS数据类型分为两类: 基本类型(Number.Boolean.Undefined.Null.String.Symbol(ES6新加,此处不讨论))与引用类型(Object).原始类型存储的是对象的实际数据,而对象类型存储的是对象的引用地址. 两种克隆 浅克隆: 原始类型为值传递,对象类型仍为引用传递. 深克隆: 所有元素或属性均完全复制,与原对象完全脱离,也就是说所有对于新对象的修改都不会反映到原对象中. 浅克隆 1.对于基本类型: //数值克隆 var a="1"; var b=a…
定义: 浅克隆: 克隆对象的一层属性, 如果对象还有对象的话,里面的对象没有进行克隆,只是把地址给了别人.也可以理解为只是简单的克隆了躯体,但是没有得到其灵魂: 深克隆:克隆对象的多层属性,对象里面还有对象的话,还会继续拷贝:例如:JSON.parse(JSON.stringfy()): 还有一种是直接赋值,比浅克隆还要糟糕:躯体都没有复制完整: 区别: 区别 基本数据类型 复杂数据类型 深克隆 改变新数据不会影响原数据 改变新数据不会影响原数据 浅克隆 改变新数据不会影响原数据 改变新数据会影…