AGo hat geschrieben:Wenn attribut1 jedoch eine Referenz auf ein Objekt (also einen nicht-primitiven Datentyp) ist sieht die sache natürlich anders aus, da kann es dir sehr wohl passieren, dass beide referenzen auf das selbe Objekt, sprich den selben Speicherbereich, zeigen, und damit würde eine Änderung von x.attribut1 auch automatisch eine Änderung von y.attribut1 sein.
Wenn er vernünftig kopiert hat, dann sollte das eigentlich nicht passieren
Das ist ja gerade der Grund, weshalb == versagt... Weil x.attribut1 einen Zeiger auf das Objekt "Prof Giesl" enthält und y.attribut1 einen Zeiger auf das Objekt "Originalgetreue Kopie von Prof Giesl"
Mache ich == dann wird erkannt, dass der eine woanders ist als der andere (anderer Speicherplatz, == liefert false), bei equals wird der Inhalt verglichen und da die Kopie exakt ist, wird true geliefert.
Wenn ich y.attribut1 nun verändere zB y.attribut1 = "Carsten Otto", dann bleibt x.attribut1 gleich "Prof Giesl"
Bei den sogenannten primitiven Datentypen wie integer, die keine Referenzen enthalten, sondern eine Information ist das anders. Das liegt dadran, dass in x.attribut1 keine Speicheradresse, also ein Zeiger auf ein kreiertes Integer-Objekt gespeichert wird, sondern direkt die binär codierte int-Zahl...
Es gibt auch den Datentyp Integer, wo eine Adresse gespeichert wird, aber das wird später noch in der VL kommen
Bis jetzt habt ihr ja nur den primitiven Datentyp int (int <> Integer)
Wenn ich jetzt == mache bei x.attribut1 und y.attribut1, dann steht in beiden dasselbe, nämlich die binär codierte int-Zahl (== liefert true)... Wenn ich eins verändere, dann das andere nicht...
Was AGo meinte, ist, wenn du bei der Kopie Fehler machst, also keine Kopie von "Prof Giesl" machst, sondern einfach y.attribut1 = x.attribut1 setzt, womit y.attribut1 die Speicheradresse von "Prof Giesl" enthält, also dasselbe wie x.attribut1 (== liefert true)... Ändere ich jedoch x.attribut1 = "Carsten Otto", dann zeigt y.attribut1 (hat ja immer noch dieselbe Speicheradresse wie x.attribut1) auf "Carsten Otto"
Das nennt man dann Seiteneffekt