Java中类的引用Copy,浅Copy和深Copy

    编程语言的Copy基本分为引用Copy,浅Copy和深Copy。

 

    引用Copy比较简单,我们将一个引用指向一个对象,就是一个引用Copy,引用Copy不会新建对象,只会将引用指向已存在的对象,代码如下:

 

Object o1 = new Object(); Object o2 = o1;

 

    浅Copy是Java默认的Copy方法,在调用clone()方法时,Java将进行浅Copy,在该过程中,Java对该对象进行Copy,对其中的基本数据类型进行Copy,但是对该对象内部的引用,不进行Copy,也就是说Copy后新对象属性中的引用还是指向原对象的属性。浅Copy代码如下:

class Province implements Cloneable { 
    private String name;
    public String getName() { 
        return name; 
    } public 

    void setName(String name) { 
        this.name = name; 
    } 

    public Province() { 
        super(); 
    } 

    public Province(String name) { 
        super(); 
        this.name = name; 
    } 

    @Override 
    public Object clone() throws CloneNotSupportedException { 
        return super.clone(); 
    } 

    @Override public String toString() { 
        return name.toString(); 
    } 
}

 

    深Copy是要将新对象中的引用也做clone,也就是新建一个全新的对象,实现原理是在写clone方法时对该对象中的引用分别调用clone方法,代码如下 :

class City implements Cloneable {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    private Province province;
    public Province getProvince() {
        return province;
    }

    public void setProvince(Province province) {
        this.province = province;
    }

    public City(String name, Province province) {
        super();
        this.name = name;
        this.province = province;
    }

    public City() {
        super();
    }

    @Override
    public Object clone() throws CloneNotSupportedException { 
        City city = (City) super.clone(); 
        city.province = (Province) province.clone(); 
        return city; 
    } 
    
    @Override public String toString() { 
        return province.toString() + ":" + name.toString(); 
    } 
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值