Sobes.tech
Junior — Middle

Qual é a diferença entre o processo de duplicação completa de um objeto e a sua cópia superficial?

sobes.tech IA

Resposta da IA

A duplicação completa de um objeto (cópia profunda) e a cópia superficial (cópia superficial) diferem no nível de cópia de objetos aninhados:

  • Cópia superficial cria um novo objeto, mas os campos que são referências a outros objetos são copiados como referências. Ou seja, os objetos aninhados não são duplicados, mas partilhados entre o original e a cópia.

  • Duplicação completa cria um novo objeto e copia recursivamente todos os objetos aninhados, criando uma cópia totalmente independente.

Exemplo em 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;
    }

    // Cópia superficial
    public Person shallowCopy() throws CloneNotSupportedException {
        return (Person) this.clone();
    }

    // Duplicação completa
    public Person deepCopy() {
        List<String> hobbiesCopy = new ArrayList<>(this.hobbies);
        return new Person(this.name, hobbiesCopy);
    }
}

Neste exemplo, na cópia superficial, a lista hobbies será compartilhada entre o original e a cópia, enquanto na cópia profunda, será criada uma nova lista.