Sobes.tech
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 ще бъде споделен между оригинала и копието, а при дълбокото — ще се създаде нов списък.