Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
das clone macht eine kopie des Objects. In diesem Fall eine "shallow copy", sprich das Array wird Kopiert, aber der Inhalt ist der selbe. dh andert man die Kopie (also das Array), bleibt das Original-Array unverändert. Ändert man den Inhalt hingegen, ändert er sich bei beiden.
Ohne clone() arbeitet man mit dem Original! Also Veränderungen am Array treffen auch das Original
zur Vollständigkeit:
Mit "deep copy" meint man, dass man auch den Inhalt kopiert, dh nicht nur das Array, sondern auch jedes Element darin.
Hm achso. Das heißt, wenn ich aus dem durch clone() entstandenen Array ein Element ändere, ändert sich auch der Array der geclont wurde. Wenn ich aber sonstige Attribute des geclonten Arrays ändere, ändert sich nicht das Orginal?
Und wie kann ich eine deep copy eines Object erstellen? Also einen eigenständigen Array, der nicht den selben, aber den gleichen Inhalt hat?
shallow copy:
kopiert das Array, dh. Veränderungen an der Kopie (nicht am Inhalt), lassen das Original in Ruhe.
Da bei beiden Arrays (orig und clon) die GLEICHEN Elemente drin sind, verändert sich bei änderungen
eines Elements das GLEICHE ELement bei beiden.
deep copy:
neues Array und neue Elemente
also sind jegliche Änderungen am Array oder an den Elementen im jeweils anderen nicht vorhanden
EDIT:
für eine deep copy müssen die Elemente darin auch kopiert werden
Um einen deep copy meines Boolean[] Arrays zu bekommen, muss ich mir also selber eine Funktion schreiben, weil clone() nur eine shallow Copy anfertigt ?
public static void main(String[] args){
Boolean[] b = {true, true, false, true};
Boolean[] c = b.clone();
c[2] = true;
for(Boolean bo : b){
System.out.print(bo + " " );
}
System.out.println();
for(Boolean bo : c){
System.out.print(bo + " ");
}
System.out.println();
Person [] p = {new Person("hans"), new Person("sepp"), new Person("test")};
Person[] pp = p.clone();
//auch kopie ändert sich da das gleiche Objekt
p[1].name = "hallloooooo";
for(Person pe : p){
System.out.print(pe.name + " " + pe+" ");
}
System.out.println();
for(Person pe : pp){
System.out.print(pe.name + " " + pe + " ");
}
}
static class Person{
String name;
Person(String name){
this.name = name;
}
void setName(String name){
this.name = name;
}
}
gibt den output:
true true false true
true true true true
hans TestCanvas$Person@addbf1 hallloooooo TestCanvas$Person@42e816 test TestCanvas$Person@9304b1
hans TestCanvas$Person@addbf1 hallloooooo TestCanvas$Person@42e816 test TestCanvas$Person@9304b1