首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

浅拷贝与深拷贝的兑现

2012-09-28 
浅拷贝与深拷贝的实现需要实现对某个对象的拷贝,做了个小例子,便于日后复习。需要拷贝的对象属于Student类

浅拷贝与深拷贝的实现

需要实现对某个对象的拷贝,做了个小例子,便于日后复习。需要拷贝的对象属于Student类型,包含两个字段sex和userName,而userName是属于引用类型。对应的类是Name,该类包含firstName和lastName。代码如下:

?

?

需要一个Student类型的对象student2,并且student2从student1复制而来,涉及到两种复制模式,

一是浅拷贝:即将student1的所有的成员变量的值拷贝给student2,但是对于引用类型则是拷贝的地址引用,所有完成浅拷贝后student2与student1中的引用类型的变量userName还是指的同一个对象,当student1的成员变量userName中firstName的值发生改变时,student2的userName中的firstName也会受到影响。浅拷贝后内存中的存储大致如下:

浅拷贝与深拷贝的兑现

由图容易看出student1与student2对象的userName属性对应的是同一个对象,所有当userName对象中的firstName或是lastName发生改变时,两个对象的对于的属性的值都会受到影响。

第二种拷贝为深拷贝,即对象中的引用类型的变量的值也做拷贝,拷贝后不指向同一对象,这样的话成员变量值的改变互相不会受影响,深拷贝后的内存存储大致如下:

浅拷贝与深拷贝的兑现

明白了深拷贝与浅拷贝的不同之处后,我们来分别实现两种不同的拷贝。

1,对于浅拷贝可以通过Object对象的clone方法实现。需要被拷贝的对象要实现Cloneable接口,实现clone方法,对应我们的Student类只需要做一些修改即可。public class Student implements Cloneable {

?????? }

??? }

调用deepClone方法就可以实现深拷贝。

Student student2 = student1.deepClone();

可以根据实际的需要选择浅拷贝或是深拷贝。

分类: Java

热点排行