J'ai trouvé une explication facile à comprendre pour clone ()
dans les tableaux Java, donc je l'ai traduite.
[Quote] stackoverflow Clone method for Java arrays
Lorsque la méthode clone est appelée sur un tableau, elle renvoie une nouvelle instance du même élément de tableau.
Par exemple, le code suivant crée différentes instances pour ʻint [] a et ʻint [] b
.
int[] a = {1,2,3};
int[] b = a.clone();
* 「a == b ?Est-ce que a et b sont la même instance? Jugement
System.out.println(a == b ? "Même instance":"C'est une instance différente");
//Sortie: instance différente
Puisque les deux sont des instances différentes, les modifications apportées à int [] b n'affecteront pas int [] a.
b[0] = 5;
System.out.println(a[0]);
System.out.println(b[0]);
//production: 1
// : 5
C'est un peu déroutant lorsqu'il s'agit d'organiser des objets. (Pour les tableaux) La méthode clone renvoie la destination de référence du nouveau tableau. Ce sera la même référence que l'objet du tableau source.
Par exemple, supposons que vous ayez une classe Dog
.
class Dog{
private String name;
public Dog(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Et j'ajoute un tableau de Dog class
.
Dog[] myDogs = new Dog[4];
myDogs[0] = new Dog("Wolf");
myDogs[1] = new Dog("Pepper");
myDogs[2] = new Dog("Bullet");
myDogs[3] = new Dog("Sadie");
Et quand vous clonez dog
...
Dog[] myDogsClone = myDogs.clone();
Les deux font référence au même élément.
System.out.println(myDogs[0] == myDogsClone[0] ? "le même":"Faux");
System.out.println(myDogs[1] == myDogsClone[1] ? "le même":"Faux");
System.out.println(myDogs[2] == myDogsClone[2] ? "le même":"Faux");
System.out.println(myDogs[3] == myDogsClone[3] ? "le même":"Faux");
//Sortie: même(4 fois)
Cela signifie que les deux ont la même référence, donc si vous apportez une modification à la séquence clonée, la modification sera reflétée dans la séquence d'origine.
//Toutes les modifications que vous apportez à myDogsClone seront également reflétées dans les valeurs des éléments de myDogs.
myDogsClone[0].setName("Ruff");
System.out.println(myDogs[0].getName());
//Sortie: Ruff
Cependant, si vous créez une nouvelle instance pour le tableau, les modifications n'affecteront pas l'instance d'origine.
myDogsClone[1] = new Dog("Spot");
System.out.println(myDogsClone[1].getName());
System.out.println(myDogs[1].getName());
//Sortie: Spot
// Pepper
J'ai beaucoup appris! : détendu:
Recommended Posts