Copie approfondie, copie superficielle et clonage en Java
Lors de la manipulation d'objets en Java, il est crucial de comprendre les nuances de la sémantique de la copie. Copie profonde, copie superficielle et clone sont des termes couramment utilisés pour décrire différentes approches de la duplication d'objets.
Copie superficielle
Une copie superficielle duplique le niveau le plus externe d'un objet. . Le nouvel objet a des champs séparés, mais toutes les références contenues dans ces champs sont partagées avec l'objet d'origine.
Exemple :
<code class="java">Example eg1 = new Example(1, new int[]{1, 2}); Example eg2 = new Example(eg1.foo, eg1.bar);</code>
Dans cette copie superficielle, eg2 a un nouveau foo et une référence au même tableau de barres que eg1.
Copie approfondie
Une copie approfondie traverse plusieurs niveaux d'un objet, créant de nouvelles copies de tous les imbriqués objets. Le nouvel objet est complètement indépendant de l'original.
Exemple :
<code class="java">Example eg1 = new Example(1, new int[]{1, 2}); Example eg2 = new Example(eg1.foo, Arrays.copy(eg1.bar));</code>
Dans cette copie complète, eg2 a un nouveau foo et une nouvelle barre de tableau, qui est une copie de celui de eg1.
Clone
La méthode clone, qui existe pour tous les objets et tableaux, est destinée à produire une copie. Cependant, son comportement n'est pas standardisé :
Conclusion
La copie approfondie est recommandée lorsqu'une indépendance complète entre les objets est nécessaire. La copie superficielle convient lorsque les références d'objet sont suffisantes. Le comportement de la méthode clone est incohérent et doit être utilisé avec prudence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!