Sobes.tech
Назад к вопросам
Junior — Middle
68

Чем отличаются поверхностное и глубокое копирование объектов?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

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.