Sobes.tech
Junior — Middle
94

Kā atšķiras virsmas un dziļa kopēšana objektu?

Uzņēmumi, kur jautāja
СБЕРСБЕР

Atbilde no AI

sobes.tech AI

Поверхностное копирование (shallow copy) создает новый объект, но поля этого объекта ссылаются на те же вложенные объекты, что и у оригинала. То есть копируются только ссылки на вложенные объекты, а не сами вложенные объекты.

Глубокое копирование (deep copy) создает новый объект и рекурсивно копирует все вложенные объекты, таким образом новый объект и его вложенные объекты полностью независимы от оригинала.

Пример:

class Person implements Cloneable {
    String name;
    Address address;

    public Person cloneShallow() throws CloneNotSupportedException {
        return (Person) super.clone();
    }

    public Person cloneDeep() {
        Person cloned = new Person();
        cloned.name = this.name;
        cloned.address = new Address(this.address.street);
        return cloned;
    }
}

class Address {
    String street;
    Address(String street) { this.street = street; }
}

При поверхностном копировании address будет общим для оригинала и копии, при глубоком — у каждого объекта будет своя копия address.