3Danke
ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
245
245
EMPFEHLEN
-
02.05.10 14:04 #1
Hi,
1. bei welchen primitiven Datentypen wird in Java bei "x = y;" der Wert und nicht die Referenz kopiert?
Ich denke mal, das ist int, long, float, double, char und short.
Stimmt das so?
2. Wird bei einer Klasse, die von Object abstammt, die Referenz oder das Objekt kopiert?
3. Kann bei einer eigenen Klasse die Zuweisung so überschrieben werden, dass das ganze Objekt kopiert wird, oder muss man dann eine copy()-Methode anlegen?
-
Hallo,
bei allen primitiven Datentypen wird der Inhalt kopiert.
Das sind die, die du genannt hast und noch byte und boolean. Ich hoffe das waren dann alle.
Und bei Referenz-Datentypen werden die Referenz und nicht das Object kopiert.
Das sind dann alle Objecte die von von Klassen erstellt wurden und alle Arrays (auch von primitiven Datentypen).
Nein, das kann nicht überschrieben werden. Es gibt schon eine solche Methode, die nennt sich clone. Allerdings musst du diese in jeder eigenen Klasse überschreiben.
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
02.05.10 14:21 #3
Ok, dankeschön!

Wenn ich die Clone-Methode überschreibe, ist dann auch das Verhalten bei "x = y;" anders?
-
Das Verhalten ist immer gleich, egal wo du es anwendest.
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
02.05.10 14:25 #5
Ah. Danke!
-
Hi, hatte das Problem auch mal.
Anbei meine Lösung von damals.
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
public static void shallowClone(Object o1, Object o2) throws Exception { for (Field f : o1.getClass().getDeclaredFields()) { f.setAccessible(true); f.set(o2, f.get(o1)); } } public static Object deepClone(Object o1) throws Exception { // OBJECT -> OBJECT WRITER STREAM -> BYTE OUTPUT -> BYTE INPUT -> OBJECT // READER STREAM -> new OBJECT // + + +--- Buffer level --+ + + // + +---------------- Serialiation / rendering level -----+ + // +----------------------------------- Object level // ----------------------------------------+ // step 1: define output stream ByteArrayOutputStream os = new ByteArrayOutputStream(); // step 2: define object stream and let it write to the output stream ObjectOutputStream oos = new ObjectOutputStream(os); // step 3: fill buffer oos.writeObject(o1); // step 4: create object input stream connectected to a byte input // stream and flush buffer into byte stream ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(os.toByteArray())); // step 5: re-render object from input stream return ois.readObject(); }
Grüße
gore
-
03.05.10 16:05 #7
Vielen Dank, das sind beides tolle Methoden!!
Ähnliche Themen
-
dll referenzen
Von DerStauner im Forum .NET Windows FormsAntworten: 5Letzter Beitrag: 25.04.09, 09:10 -
Newbie-Frage: Datenbank für Referenzen
Von gonzales-gonzo im Forum PHPAntworten: 6Letzter Beitrag: 25.09.07, 13:38 -
Referenzen
Von Nob im Forum PHPAntworten: 3Letzter Beitrag: 24.04.07, 20:34 -
NN 6 und 7 Javascript Referenzen
Von KMX-Robin im Forum Javascript & AjaxAntworten: 0Letzter Beitrag: 06.09.02, 17:07 -
C Referenzen
Von FactorX im Forum C/C++Antworten: 3Letzter Beitrag: 01.05.02, 16:10





Zitieren

Login





