Avatar ·

Cómo copiar correctamente un objeto en Java: copia superficial y profunda

¡Hola a todos! Acabo de empezar a aprender Java y me encontré con un problema que me confunde mucho. Estoy intentando copiar un objeto, pero obtengo resultados inesperados. Supongamos que tengo una clase simple Person con campos name y age, y también un objeto anidado Address. Cuando escribo: ```java Person p1 = new Person("Iván", 30, new Address("Moscú", "Tverskaya", 10)); Person p2 = p1; p2.setName("Pedro"); System.out.println(p1.getName()); // Imprime "Pedro" - ¡¿por qué?! ``` Esperaba que p1 siguiera siendo "Iván" y p2 se convirtiera en "Pedro". Pero, según entendí, esto es simplemente copiar la referencia. Probé usar el método clone(): ```java public class Person implements Cloneable { private String name; private Address address; // constructor, getters, setters @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } ``` Pero cuando cloné y cambié la dirección en la copia, la dirección del original también cambió. Leí que esto se llama