Назад к вопросам
СБЕР
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.