Core - 1

В чем отличие между поверхностным и глубоким клонированием?


В контексте клонирования объектов, поверхностное клонирование (shallow cloning) и глубокое клонирование (deep cloning) отличаются способом копирования ссылочных объектов, на которые ссылается клонируемый объект. - Поверхностное клонирование: При поверхностном клонировании создается новый объект, который является копией исходного объекта. Однако, ссылки на другие объекты внутри клонируемого объекта остаются те же самые. Это означает, что клонируемый объект и его клон будут ссылаются на одни и те же объекты. Если изменить состояние ссылочного объекта в одном из объектов, это изменение будет отражаться и в другом объекте. - Глубокое клонирование: При глубоком клонировании создается новый объект, и все ссылочные объекты внутри клонируемого объекта также клонируются. Это означает, что создаются независимые копии ссылочных объектов. Если изменить состояние ссылочного объекта в одном из объектов, это не повлияет на другой объект. Пример: public class MyClass implements Cloneable { private int value; private MyObject obj; public MyClass(int value, MyObject obj) { this.value = value; this.obj = obj; } @Override public Object clone() throws CloneNotSupportedException { MyClass cloned = (MyClass) super.clone(); // Глубокое клонирование объекта MyObject cloned.obj = (MyObject) obj.clone(); return cloned; } } В приведенном примере, если мы выполним глубокое клонирование объекта `MyClass` , то будет создана независимая копия объекта `MyObject` . Если мы выполним поверхностное клонирование, то клонированный объект `MyClass` будет ссылаться на тот же объект `MyObject` , что и оригинал.


Копировать ссылку