tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 1 Beitrag von zerix
  • 1 Beitrag von zerix
  • 1 Beitrag von gorefest
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
245
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    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?
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

  2. #2
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    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ß

    Sascha
    Jellysheep bedankt sich. 
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  3. #3
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Ok, dankeschön!
    Wenn ich die Clone-Methode überschreibe, ist dann auch das Verhalten bei "x = y;" anders?
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

  4. #4
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Das Verhalten ist immer gleich, egal wo du es anwendest.

    Gruß

    Sascha
    Jellysheep bedankt sich. 
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  5. #5
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Ah. Danke!
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

  6. #6
    gorefest gorefest ist offline Mitglied Brokat
    Registriert seit
    Apr 2009
    Beiträge
    256
    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
    Jellysheep bedankt sich. 

  7. #7
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Vielen Dank, das sind beides tolle Methoden!!
     
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

Ähnliche Themen

  1. dll referenzen
    Von DerStauner im Forum .NET Windows Forms
    Antworten: 5
    Letzter Beitrag: 25.04.09, 09:10
  2. Newbie-Frage: Datenbank für Referenzen
    Von gonzales-gonzo im Forum PHP
    Antworten: 6
    Letzter Beitrag: 25.09.07, 13:38
  3. Referenzen
    Von Nob im Forum PHP
    Antworten: 3
    Letzter Beitrag: 24.04.07, 20:34
  4. NN 6 und 7 Javascript Referenzen
    Von KMX-Robin im Forum Javascript & Ajax
    Antworten: 0
    Letzter Beitrag: 06.09.02, 17:07
  5. C Referenzen
    Von FactorX im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 01.05.02, 16:10