Java Clone

clone对象的特性三点:

1. a.clone() != a:不是同一个实例了。指向不同的内存地址,(在java堆中是两个独立的对象)。

2. a.clone.getClass()== a.getClass():类型一样

3. clone.equals(a):内容一样

前两个特性通过重写 clone方法实现,第三个特性通过重写equals方法实现。

 

clone最后都会调用object的clone方法,创建一个对象然后一一赋值。对于原始类型跟不可变类型(String,Long...)来说是没有问题的,但是如果是复杂类型比如arraylist的话,那么clone对象跟原始对象会指向同一个对象。就不是真正的clone了。要深度clone。

 

怎么实现clone:实现接口:Cloneable,重写方法clone,需要抛出异常CloneNotSupportedException,

浅clone:

@Override
    protected Rectangle clone() throws CloneNotSupportedException {
        return (Rectangle) super.clone();
    }

 

深clone:

@Override
protected Object clone() throws CloneNotSupportedException {
    Employee cloned = (Employee)super.clone();
    cloned.setDepartment((Department)cloned.getDepartment().clone());
    return cloned;
}

 

出自:http://www.importnew.com/6960.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值