shallow copy与deep copy

Java数据类型分为两大类:

基本数据类型与引用数据类型

基本数据类型: 变量名指向具体的数值

逻辑类型:boolean (默认值:true);

文本类型:char (默认值:'\0',即\u0000);

整型:byte,short,int,long (默认值:0);

浮点型:float,double (默认值:0.0);


与基本数据类型相对的是,引用数据类型:变量名指向存储数据对象的内存地址


两者存储的结构如下:

引用数据类型在声明时,只分配引用空间,变量初始化时,分配数据空间。所以,在操作引用类型对象时,一定要对引用类型对象初始化。


在了解了引用数据类型之后,下面继续来探讨shallow copy与deep copy:

shallow copy:浅复制,如果被复制对象的成员变量是一个引用型变量(如是一个对象数组),则复制对象中将不包括该变量指向的对象。

deep copy:深复制,在浅复制的基础上,同时复制该变量所指向的对象。

为了对shallow copy和deep copy有一个深入的理解,可以这么理解:

假设一个数组a,抽象的存储结构如下所示:

那么浅复制可以这样来描述:

数组b只复制了a的位于引用空间的引用数值,并没有复制位于数据空间的对象数值。Object方法的clone()是shallow copy,而不是deep copy。

深复制可以这样来描述:

数组c同时复制了数组a的引用数值和对象数值,这个过程根据被复制对象a的类型创建对象c,并完成初始化,数组c的初始化值即数组a所指向对象的值,也就是c[0]=a[0],c[1]=a[1],c[2]=a[2]。数组a与数组c的引用地址是不相同的,但两者的数组元素的值是相等的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值