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

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

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

sobes.tech AI

Полное дублирование объекта (deep copy) и поверхностное копирование (shallow copy) отличаются уровнем копирования вложенных объектов:

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

  • Полное дублирование создает новый объект и рекурсивно копирует все вложенные объекты, создавая полностью независимую копию.

Пример на Java:

import java.util.ArrayList;
import java.util.List;

class Person implements Cloneable {
    String name;
    List<String> hobbies;

    public Person(String name, List<String> hobbies) {
        this.name = name;
        this.hobbies = hobbies;
    }

    // Поверхностное копирование
    public Person shallowCopy() throws CloneNotSupportedException {
        return (Person) this.clone();
    }

    // Полное дублирование
    public Person deepCopy() {
        List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
        return new Person(this.name, hobbiesCopy);
    }
}

В этом примере при поверхностном копировании список hobbies будет общим для оригинала и копии, а при глубоком — создастся новый список.