clone浅拷贝

文章通过一个Java实例展示了如何实现对象拷贝,重点讨论了实现Cloneable接口并使用clone()方法进行浅拷贝的过程。在浅拷贝中,基本类型被复制,而引用类型的对象则共享同一引用。此外,还提到了SpringBeanUtils的copyProperties方法同样进行浅拷贝的情况。
摘要由CSDN通过智能技术生成

通过一个实例对象 生成另一个对象,称为 拷贝。

需要 实现 

java.lang.Cloneable

该接口是一个 标记接口

通过调用 clone() 方法,完成 对象拷贝。该方法是Object类中的方法,所有对象都继承该方法。

clone()方法是 浅拷贝,也就是 只 将 对象 中的 字段 值 进行复制:

1. 如果值 是 基本类型,那么就是 copy 一份 该值

2. 如果值 是 引用类型,那么就是 copy一份该引用,那么,此时,新对象和老对象 都持有 该引用,其中一方修改改引用对象的数据,另一方也是拿到最新修改的值。

3. clone 方法 不会调用 构造函数

 

public class CloneTest implements Cloneable {

    private Cat cat;

    private String name;

    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    public String getName() {
        return name;
    }

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

    public CloneTest(Cat cat, String name) {
        this.cat = cat;
        this.name = name;
        System.out.println("CloneTest构造函数");
    }

    public static void main(String[] args) throws Exception{
        Cat ori_cat = new Cat("ori cat");
        CloneTest cloneTest = new CloneTest(ori_cat, "ori-clonetest");

        CloneTest clone = (CloneTest)cloneTest.clone();

        clone.getCat().setName("clone cat");

        System.out.println(cloneTest.getCat().getName());
    }
}

我们经常用的 BeanUtils进行对象属性copy,也是浅拷贝

org.springframework.beans.BeanUtils#copyProperties(java.lang.Object, java.lang.Object)

        Cat ori_cat = new Cat("ori cat");
		OriClass ori_class = new OriClass("ori class", ori_cat);
		TarClass tarClass = new TarClass();
		BeanUtils.copyProperties(ori_class,tarClass);

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值