Avatar ·

Comment copier correctement un objet en Java : copie superficielle et copie profonde

Bonjour à tous ! Je viens de commencer à apprendre Java et j'ai rencontré un problème qui me trouble beaucoup. J'essaie de copier un objet, mais j'obtiens des résultats inattendus. Supposons que j'ai une classe simple Person avec les champs name et age, ainsi qu'un objet imbriqué Address.\n\nQuand j'écris :\n\n```java\nPerson p1 = new Person("Ivan", 30, new Address("Moscou", "Tverskaya", 10));\nPerson p2 = p1;\np2.setName("Pierre");\nSystem.out.println(p1.getName()); // Affiche "Pierre" - pourquoi ?!\n```\n\nJe m'attendais à ce que p1 reste "Ivan" et que p2 devienne "Pierre". Mais, comme je l'ai compris, c'est simplement une copie de référence. J'ai essayé d'utiliser la méthode clone() :\n\n```java\npublic class Person implements Cloneable {\n private String name;\n private Address address;\n // constructeur, getters, setters\n @Override\n protected