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.