深克隆和浅克隆的区别

 

深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是在对象克隆或复制过程中常用的两种方式,它们有以下区别:

  1. 浅拷贝:浅拷贝创建一个新对象,该对象与原始对象共享相同的内存地址,其中的引用类型属性仍然指向原始对象中的相同对象。换句话说,浅拷贝只复制对象的引用,而不复制对象本身。

  2. 深拷贝:深拷贝创建一个新对象,该对象与原始对象完全独立,即使是引用类型属性也会被复制并创建新的对象。深拷贝会递归复制对象及其所有引用类型属性,确保新对象与原始对象没有任何关联。

下面是一个示例来说明深拷贝和浅拷贝的区别:

class Person {
    private String name;
    private Address address;

    public Person(String name, Address address) {
        this.name = name;
        this.address = address;
    }

    // Getters and setters
}

class Address {
    private String city;

    public Address(String city) {
        this.city = city;
    }

    // Getters and setters
}

// 浅拷贝示例
Address address = new Address("Beijing");
Person person1 = new Person("Alice", address);
Person person2 = person1; // 浅拷贝
person2.setName("Bob");
person2.getAddress().setCity("Shanghai");

System.out.println(person1.getName()); // 输出 "Bob",原始对象也被修改
System.out.println(person1.getAddress().getCity()); // 输出 "Shanghai",原始对象也被修改

// 深拷贝示例
Address address = new Address("Beijing");
Person person1 = new Person("Alice", address);
Person person2 = new Person(person1.getName(), new Address(person1.getAddress().getCity()));
person2.setName("Bob");
person2.getAddress().setCity("Shanghai");

System.out.println(person1.getName()); // 输出 "Alice",原始对象不受影响
System.out.println(person1.getAddress().getCity()); // 输出 "Beijing",原始对象不受影响

在浅拷贝示例中,person1person2共享相同的Address对象,因此对person2的修改也会影响到person1。而在深拷贝示例中,通过创建新的Address对象来确保person1person2Address属性完全独立,对其中一个对象的修改不会影响到另一个对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值