Hallo,
soweit ich es von clone() verstanden habe, müssen alle Felder, die Referenzen sind, dort auch kopiert werden, ansonsten zeigen die Felder vom neuen Objekt weiterhin auf die Werte, vom geklonten.
Ziehe daraus den Schluss, dass wenn man dies nicht macht, und dann im neuen Objekt den Wert einer diesen Felder ändert, sich dann auch den Wert im geklonten Objekt ändern sollte.
Ist aber nicht passiert, warum?
Hier der Kode:
soweit ich es von clone() verstanden habe, müssen alle Felder, die Referenzen sind, dort auch kopiert werden, ansonsten zeigen die Felder vom neuen Objekt weiterhin auf die Werte, vom geklonten.
Ziehe daraus den Schluss, dass wenn man dies nicht macht, und dann im neuen Objekt den Wert einer diesen Felder ändert, sich dann auch den Wert im geklonten Objekt ändern sollte.
Ist aber nicht passiert, warum?
Hier der Kode:
Code:
public class Clone implements Cloneable{
Integer i;
Clone(Integer i){
this.i=i;
}
@Override
public Object clone(){
try {
return super.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public static void main(String args[]){
Clone c = new Clone(new Integer(2));
Clone d = (Clone)c.clone();
System.out.println(d.i); //ausgabe 2, klar
d.i = new Integer(-1);
System.out.println(c.i); //noch 2??
}
}