Objektorientiert

thomy800

Erfahrenes Mitglied
ich habe mal eine allgemeine frage zu java anhand eines beispiels:

Java:
...
Graphics2D g= image.getGraphics2D();
draw(g);
g.dispoe();
...

public void draw(Graphics2D g) {
   g.setColor(Color.red);
   g.fillRect(0,0,5,5);
}

so nun die frage; wieso funktioniert das obwohl die methode draw void ist, also innerhalb der methode g ändert aber eigentlich nicht zurückgeben dürfte (ist ja kein return g), es aber trotzdem tut?
wenn ich das selbe mit einem eigenem objekt versuche, also zb. ein objekt was nur ein int besitzt und in einer void-methode die zahl ändere wird sie zwar innerhalb der methode geändert, jedoch im hauptprogramm, wo sie aufgerufen wurde, nicht.
wieso?

mfg thomy
 
Hi,

wenn du einen einfachen Datentyp wie int oder double übergiebst wird eine Kopie davon gemacht, und die Funktion arbeitet mit der Kopie. Bei Komplexen Datentypen wie zum Beispiel Klassen wird nur eine Referenz auf das Objekt übergeben. Der Funktion wird also nur mitgeteilt wo sich das Objekt im Speicher befindet. Damit muss nicht das ganze Objekt kopiert werden, und deshalb änderst du das Originalobjekt. Wenn du dem übergebenen Objekt allerdings eine neue Instanz zuweist hat das keine Auswirkungen auf das Original. Damit überschreibst du nämlich die Referenz auf das Objekt udn weist somit nicht mehr wo es im Speicher steht.

Gruß Benny
 
Zurück