【Java】----对象的深浅拷贝

对象的深浅拷贝

如果一个类要调用clone方法,需要实现Cloneable接口。
深拷贝:会同时拷贝一个实例化对象,实现深拷贝需用序列化实现(类实现序列化接口)
浅拷贝:拷贝的对象虽然是双份的,但是其对象的引用是共享的,没有被拷贝,因此若拷贝对象改变原对象的属性,会真实改变此对象。
//深拷贝

public class CloneTest2 {
    public static void main(String[] args) throws CloneNotSupportedException {
        //深拷贝,会同时拷贝一个实例化对象
        //实现深拷贝需用序列化实现(类实现序列化接口)
        Teacher teacher=new Teacher("刘","java");
        Student student=new Student("zhang",12,teacher);
        System.out.println("原student"+student);
        Student cloneStudent=student.cloneStudent();
        System.out.println("克隆student"+cloneStudent);

        teacher.setName("Peter");
        System.out.println("改变teacher信息");
        System.out.println("原student"+student);
        System.out.println("克隆student"+cloneStudent);

    }
}

//浅拷贝

public class CloneTest1 {
    public static void main(String[] args) throws CloneNotSupportedException {
        Teacher teacher=new Teacher("刘","java");
        Student student=new Student("zhang",12,teacher);
        System.out.println("原Student"+student);
        System.out.println("克隆的student"+student.clone());
        //检验teacher是否拷贝了
        //如果改变teacher信息,student和克隆student中关于teacher的信息都改变了,说明teacher是共享的
        //如果改变teacher信息,student关于teacher的信息都改变了,
        // 克隆student中关于teacher的信息未改变了,明teacher是不共享的

        //最终结果克隆对象也改变了,因此克隆是浅拷贝(仍保留同一个引用对象)
        teacher.setName("Peter");
        System.out.println("改变teacher信息");
        System.out.println("原student"+student);
        System.out.println("克隆student"+student.clone());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值