Ich habe eine leicht verständliche Erklärung für "clone ()" in Java-Arrays gefunden und sie daher übersetzt.
[Quote] Stackoverflow Clone method for Java arrays
Wenn die Klonmethode für ein Array aufgerufen wird, wird eine neue Instanz desselben Array-Elements zurückgegeben. Der folgende Code erstellt beispielsweise verschiedene Instanzen für "int [] a" und "int [] b".
int[] a = {1,2,3};
int[] b = a.clone();
* 「a == b ?Ist a und b dieselbe Instanz? Beurteilung
System.out.println(a == b ? "Gleiche Instanz":"Es ist eine andere Instanz");
//Ausgabe: Andere Instanz
Da es sich bei beiden um unterschiedliche Instanzen handelt, wirken sich Änderungen an int [] b nicht auf int [] a aus.
b[0] = 5;
System.out.println(a[0]);
System.out.println(b[0]);
//Ausgabe: 1
// : 5
Dies ist etwas verwirrend, wenn es darum geht, Objekte anzuordnen. (Für Arrays) Die Klonmethode gibt das Referenzziel des neuen Arrays zurück. Dies ist dieselbe Referenz wie das Quellarrayobjekt.
Angenommen, Sie haben eine Hundeklasse.
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;
}
}
Und ich füge eine Reihe von "Hundeklassen" hinzu.
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");
Und wenn Sie "Hund" klonen ...
Dog[] myDogsClone = myDogs.clone();
Die beiden beziehen sich auf dasselbe Element.
System.out.println(myDogs[0] == myDogsClone[0] ? "das Gleiche":"Falsch");
System.out.println(myDogs[1] == myDogsClone[1] ? "das Gleiche":"Falsch");
System.out.println(myDogs[2] == myDogsClone[2] ? "das Gleiche":"Falsch");
System.out.println(myDogs[3] == myDogsClone[3] ? "das Gleiche":"Falsch");
//Ausgabe: Gleich(4 Mal)
Dies bedeutet, dass beide dieselbe Referenz haben. Wenn Sie also eine Änderung an der geklonten Sequenz vornehmen, wird die Änderung in der ursprünglichen Sequenz wiedergegeben.
//Alle Änderungen, die Sie an myDogsClone vornehmen, werden auch in den Werten der Elemente in myDogs berücksichtigt.
myDogsClone[0].setName("Ruff");
System.out.println(myDogs[0].getName());
//Ausgabe: Ruff
Wenn Sie jedoch eine neue Instanz für das Array erstellen, wirken sich die Änderungen nicht auf die ursprüngliche Instanz aus.
myDogsClone[1] = new Dog("Spot");
System.out.println(myDogsClone[1].getName());
System.out.println(myDogs[1].getName());
//Ausgabe: Spot
// Pepper
Ich habe viel gelernt! : entspannt:
Recommended Posts