Le contenu de cet article est une brève analyse (exemple de code) sur le clonage Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Qu'est-ce que la profondeur ? Juste un diplôme.
Clone : Faites une copie de
La classe clonée implémente l'interface Cloneable, remplace la méthode clone() et revient à l'appel de clone() de la classe parent.
public class Person implements Cloneable{ @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } //...省略其余代码 }
Ensuite, lors du clonage, appelez simplement clone() que nous venons de couvrir.
Copie superficielle
Maintenant, il y a la classe Enfant :
public class Child{ //...省略其余代码 }
et la classe Personne :
public class Person implements Cloneable{ private int age; private String name; private Child child; //...省略其余代码 }
Clonez l'objet Personne p1 et attribuez-le à p2, Ensuite, nous regardons leurs résultats toString() et hashCode() :
public class Main { public static void main(String[] args) throws CloneNotSupportedException { Person p1 = new Person("zhangsan",23); p1.setChild(new Child("xiaoming", 1);); //克隆操作 Person p2 = p1.clone(); //打印看看 System.out.println(p1+", "+p1.hashCode()+", "+p1.getChild().hashCode()); System.out.println(p2+", "+p2.hashCode()+", "+p2.getChild().hashCode()); } }
Sortie :
Person [age=23, name=zhangsan, value=666, child=Child [name=xiaoming, age=1]], 118352462, 1550089733 Person [age=23, name=zhangsan, value=666, child=Child [name=xiaoming, age=2]], 865113938, 1550089733
Conclusion : Les valeurs des membres p1, p2 sont égales, mais ils sont deux Pour des objets différents, leurs membres Enfants sont le même objet.
Deep copy
implémente également l'interface Cloneable pour Child et remplace clone() :
public class Child implements Cloneable{ @Override protected Object clone() throws CloneNotSupportedException { return super.clone();; } //...省略其余代码 }
Ensuite, changez la classe Person
: clone()
public class Person implements Cloneable{ @Override protected Object clone() throws CloneNotSupportedException { Person p = (Person)super.clone(); p.setChild((Child)child.clone()); return p; } //...省略其余代码 }
, le résultat est : main(String [] args)
Person [age=23, name=zhangsan, value=666, child=Child [name=xiaoming, age=1]], 118352462, 1550089733 Person [age=23, name=zhangsan, value=666, child=Child [name=xiaoming, age=2]], 865113938, 1442407170
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!