Junior — Middle
Каква е разликата между процеса на пълно дублиране на обект и неговото повърхностно копиране?
sobes.tech AI
Отговор от 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 ще бъде споделен между оригинала и копието, а при дълбокото — ще се създаде нов списък.