Avatar ·

Como copiar corretamente um objeto em Java: cópia superficial e profunda

Olá a todos! Comecei a estudar Java recentemente e me deparei com um problema que me deixa muito confuso. Estou tentando copiar um objeto, mas obtenho resultados inesperados. Suponha que eu tenha uma classe simples Person com os campos name e age, além de um objeto aninhado Address. Quando escrevo: ```java Person p1 = new Person("Ivan", 30, new Address("Moscou", "Tverskaya", 10)); Person p2 = p1; p2.setName("Petr"); System.out.println(p1.getName()); // Exibe "Petr" - por quê?! ``` Eu esperava que p1 permanecesse "Ivan" e p2 se tornasse "Petr". Mas, como entendi, isso é apenas uma cópia de referência. Tentei usar o método clone(): ```java public class Person implements Cloneable { private String name; private Address address; // construtor, getters, setters @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } ``` Mas quando clonei e alterei o endereço na cópia, o endereço do original também mudou. Li que isso se chama