Поверхностное копирование создаёт новый объект, но копирует только ссылки на значения его полей. Это значит, что новый объект ссылается на те же самые объекты что и оригинал, вместо того чтобы создавать независимые копии этих объектов.
Глубокое копирование создаёт новый объект и рекурсивно копирует всё, на что ссылается. В результате получается полностью независимая копия, где изменения вложенных объектов не влияют на оригинал.
// Пример поверхностного копирования
Оригинал: Person(name="John", address=Address(city="NYC"))
ПоверхностнаяКопия: Person(name="John", address=Address(city="NYC"))
// Обе ссылаются на ОДИН И ТОТ ЖЕ объект Address
// Пример глубокого копирования
Оригинал: Person(name="John", address=Address(city="NYC"))
ГлубокаяКопия: Person(name="John", address=Address(city="NYC"))
// Каждая имеет СВОЙ независимый объект Address
clone() по умолчанию)В Java стандартный метод clone() выполняет поверхностное копирование. Чтобы реализовать глубокое копирование, нужно вручную клонировать все вложенные объекты или воспользоваться сериализацией.
При поверхностном копировании новый объект содержит те же ссылки на вложенные объекты, что и оригинал, поэтому изменения этих вложенных объектов повлияют и на оригинал, и на копию.
Новый — ещё не проверен сообществом
Вы