java对象克隆以及深拷贝和浅拷贝】的更多相关文章

1.什么是"克隆"? 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能 会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的.在 Java语言中,用简单的赋值语句是不能满足这种需求的.要满足这种需求虽然有很多途径,但实现clone()方法是其中最简单,也是最高效的手段. Java的所有类都默认继承java.lang.Object类,在java.lang…
一.为什么要使用克隆 在实际编程过程中,我们常常要遇到这种情况:有一个对象A,在某一时刻A中已经包含了一些有效值,此时可能 会需要一个和A完全相同新对象B,并且此后对B任何改动都不会影响到A中的值,也就是说,A与B是两个独立的对象,但B的初始值是由A对象确定的.在 Java语言中,用简单的赋值语句是不能满足这种需求的.要满足这种需求虽然有很多途径,但实现clone()方法是其中最简单,也是最高效的手段. 使用new和赋值语句或者set注入都是可以的,但是,这会花费大量开销去做,效率低,并且还会产…
Java对象克隆(Clone)及Cloneable接口.Serializable接口的深入探讨 Part I 没啥好说的,直接开始Part II吧. Part II 谈到了对象的克隆,就不得不说为什么要对对象进行克隆.Java中所有的对象都是保存在堆中,而堆是供全局共享的.也就是说,如果同一个Java程序的不同方法,只要能拿到某个对象的引用,引用者就可以随意的修改对象的内部数据(前提是这个对象的内部数据通过get/set方法曝露出来).有的时候,我们编写的代码想让调用者只获得该对象的一个拷贝(也…
使用场景: 在日常的编程过程 中,经常会遇到,有一个对象OA,在某一时间点OA中已经包含了一些有效值 ,此时可能会需一个和OA完全相对的新对象OB,并且要在后面的操作中对OB的任何改动都不会影响到OA的值,也就是OA与Ob是需要完全两个独立的对象. 但OB的初始值是由对象OA确定的.在JAVA语言中,用普通的赋值语句是满足不了需求的.使用对象的clone()方法是实现克隆的最简单.也是最高效的手段. Java的所有类都默认继承java.lang.Object类,在java.lang.Object…
版权声明:本文出自汪磊的博客,转载请务必注明出处. Java深拷贝与浅拷贝实际项目中用的不多,但是对于理解Java中值传递,引用传递十分重要,同时个人认为对于理解内存模型也有帮助,况且面试中也是经常问的,所以理解深拷贝与浅拷贝是十分重要的. 一.Java中创建对象的方式 ①:与构造方法有关的创建对象方式 这是什么意思呢?比如我们new一个对象,其实就是调用对现象的有参或者无参的构造函数,反射中通过Class类的newInstance()方法,这种默认是调用类的无参构造方法创建对象以及Constr…
什么是深拷贝? 什么是浅拷贝? 创建一个对象的方法有几种? 默认的Object方法中的clone是深拷贝还是浅拷贝? 为什么说很多深拷贝都是不彻底的深拷贝? 什么是原型模型,什么是原型模式? 原型模型:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式:Prototype(原型模式)是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象…
刷题.面试中,我们可能会遇到将一个对象的属性赋值到另一个对象的情况,这种情况就叫做拷贝.拷贝与Java内存结构息息相关,搞懂Java深浅拷贝是很必要的! 在对象的拷贝中,很多初学者可能搞不清到底是拷贝了引用还是拷贝了对象.在拷贝中这里就分为引用拷贝.浅拷贝.深拷贝进行讲述. 引用拷贝 引用拷贝会生成一个新的对象引用地址,但是两个最终指向依然是同一个对象.如何更好的理解引用拷贝呢?很简单,就拿我们人来说,通常有个姓名,但是不同场合.人物对我们的叫法可能不同,但我们很清楚哪些名称都是属于"我&quo…
原文:http://www.cnblogs.com/Qian123/p/5710533.html 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况. 但是如果你复制的是一个对象,情况就有些复杂了. 假设说我是一个beginner,我会这样写: class Student { private i…
首先,区分一下拷贝和克隆: 拷贝:当拷贝一个变量时,原始变量与拷贝变量引用的是同一个对象.当改变一个变量所引用的对象,则会对另一个变量造成影响. 克隆:当克隆一个对象时,是重新的创建了和该对象内容相同的对象. clone方法是Object类受保护(preteced)方法,用户编写的代码不能直接调用.只有相同的类才能克隆其本身. 问题: 如果待克隆的对象中的所有数据域都是数值或基本类型,这样的克隆没有问题. 但是,如果在对象中包含了子对象的引用,拷贝的结果就会使得两个域引用同一个子对象,此时,原始…
深拷贝与浅拷贝的问题,也是面试中的常客.虽然大家都知道两者表现形式不同点在哪里,但是很少去深究其底层原理,也不知道怎么才能优雅的实现一个深拷贝.其实工作中也常常需要实现深拷贝,今天一灯就带大家一块深入剖析一下深拷贝与浅拷贝的实现原理,并手把手教你怎么优雅的实现深拷贝. 1. 什么是深拷贝与浅拷贝 浅拷贝: 只拷贝栈内存中的数据,不拷贝堆内存中数据. 深拷贝: 既拷贝栈内存中的数据,又拷贝堆内存中的数据. 2. 浅拷贝的实现原理 由于浅拷贝只拷贝了栈内存中数据,栈内存中存储的都是基本数据类型,堆内…