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
No answers yet.
Faça login para deixar uma resposta
Blogs