0
点赞
收藏
分享

微信扫一扫

浅拷贝与深拷贝

在这里插入图片描述

浅拷贝与深拷贝

浅拷贝

之前我们学了数组的拷贝,那么对象如何进行拷贝呢

浅拷贝定义

浅拷贝代码演示

class Hia{
    int a=6;
}
class Animal {
    String name="animal";
    int age=0;
    Hia hia=new Hia();

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
public class Text4 {
    public static void main(String[] args) throws CloneNotSupportedException {
        Animal dog=new Animal("dog",5);
        Animal dogcopy=(Animal) dog.clone();

    }
}

代码讲解:

浅拷贝的特点

在这里插入图片描述

当然我们也可以用代码直观的看出来

public class Text4 {
    public static void main(String[] args) throws CloneNotSupportedException {
        Animal dog=new Animal("dog",5);
        Animal dogcopy=(Animal) dog.clone();
        System.out.println(dog.hia.a);
        System.out.println(dogcopy.hia.a);
        dog.hia.a=9;
        System.out.println(dog.hia.a);
        System.out.println(dogcopy.hia.a);
    }
}

在这里插入图片描述

想要将复制里面的引用也复制一份就要用到深拷贝

深拷贝

深拷贝定义

深拷贝代码演示

class Hia implements Cloneable{
    int a=6;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
class Animal implements Cloneable{
    String name="animal";
    int age=0;
    Hia hia=new Hia();

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    protected  Object clone() throws CloneNotSupportedException {
        Animal animal=(Animal) super.clone();
        animal.hia=(Hia) animal.hia.clone();
        return animal;
    }
}
public class Text4 {
    public static void main(String[] args) throws CloneNotSupportedException {
        Animal dog=new Animal("dog",5);
        Animal dogcopy= (Animal) dog.clone();
        System.out.println(dog.hia.a);
        System.out.println(dogcopy.hia.a);
        dog.hia.a=9;
        System.out.println(dog.hia.a);
        System.out.println(dogcopy.hia.a);
    }
}

在这里插入图片描述
代码解释

深拷贝特点

在这里插入图片描述
深拷贝是一种复制数据的方式,它会创建一个完全独立的副本,而不是原始数据的引用。深拷贝的特点如下:

  1. 完全独立:深拷贝会创建一个全新的对象,而不是原对象的引用。

  2. 完整复制:深拷贝会复制所有的属性和方法,包括对象的嵌套属性和方法。

  3. 递归复制:如果对象有嵌套属性或方法,深拷贝会递归复制嵌套对象的属性和方法。

  4. 不受原对象改变影响:因为深拷贝生成的对象完全独立,所以它不会受到原对象的更改的影响。

需要注意的是,深拷贝可能会导致性能问题,特别是当数据结构非常复杂时。因为深拷贝会复制所有的属性和方法,包括对象的嵌套属性和方法,所以可能需要花费大量的时间和内存来完成。

举报

相关推荐

0 条评论