Java对象的浅拷贝和深拷贝

首先介绍变量拷贝,变量拷贝时,原始变量和拷贝的新变量引用同一个对象。
例如:

Employee e1 = new Employee();
Employee e2 = e1;


如果要创建一个对象的新拷贝,其状态和原对象一样,但是以后各自状态各自维护,就要使用到clone方法了,当然你也可以通过其他方法实现。

clone是Object类的一个protected方法,也就意味的你不能乱拷贝的,其次如果对象中的所有属性都属于数值或者基本类型,这样拷贝没有问题的,但是,如果对象中包含子对象的引用,那么拷贝的结果就是两个对象引用同一个子对象。

1、浅拷贝
默认的拷贝都是浅拷贝,你可以通过下面的方法实现:

class Employee implements Cloneable
{
public Employee clone() throws CloneNotSupportedException
{
return super.clone();
}
}

浅拷贝需要记住的是原对象的各属性最好都是基本类型或者不可变的对象。

2、深拷贝
深拷贝是相对浅拷贝的,解决不能管理子对象的问题的。
实现方法如下:

class Employee implements Cloneable
{
public Object clone() throws CloneNotSupportedException
{
Employee cloned = (Employee)super.clone();

//深拷贝子对象
cloned.dep = (Department)dep.clone();
return cloned.
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值