1
1668mib
Gast
@Dark Power: Ohne hier die Aussagen anderer User beurteilen zu wollen, kommt da "nicht recht" raus, weil bei der Übergabe die Adresse der Referenz kopiert wird.
Natürlich kann man in Java Dinge machen, die sich wie CbR anfühlen.
Deshalb ist es für mich auch kein "echtes" CbV. Bei einem echten CbV würde ich erwarten, dass das Objekt kopiert wird. Das Kopieren von Objekten ist jedoch eine Wissenschaft für sich und Gott sei Dank macht Java das nicht :-)
Weil wie wird ein Objekt korrekt kopiert?
Also es ist vernünftig, dass Objekte nicht kopiert werden bei der Übergabe. Allerdings sollte man sich im Klaren sein, dass dennoch die Referenzen auf die Objekte kopiert werden. Das finde ich persönlich allerdings auch nicht schlimm. Ich finde Ausgabe-Parameter nicht wirklich hübsch und die Beispiele von mir halte ich für schlechten Stil.
@Redirion:
Ok, dann weise ich halt "null" zu. Besser?
Ich kann es anders nicht nachweisen.
Du hast nachgewiesen, dass die Referenz auf das Objekt übergeben wird. Ich habe nachgewiesen, dass es lediglich eine Kopie der Referenz ist.
call-by-reference übergibt aber keine Kopien von Referenzen, sondern die Referenzen selbst. Genau das wird bei Java aber nicht gemacht.
Und in Zeile 5 deines main-Methoden-Beispiels wird auch nur die Referenz auf dem Speicher kopiert. Genauso wie es bei der Parameterübergabe passiert. Du hast eine neue Variable mit dem selben Speicherinhalt. Genau das macht Java bei der Parameterübergabe. Dies ist allerdings kein call-by-reference.
call-by-reference heißt ja nicht, dass der übergebene Parameter eine Referenz ist, sondern dass statt dem Wert des Parameters (im Fall einer Referenz/Objekts die Adresse des Objekts) eine Referenz auf den Parameter übergeben wird.
Also wenn Java CbR hätte, dann würde es bei einem Aufruf wie diesem
foo(bar);
sowas draus machen:
call foo with address of variable bar
Aber was macht Java:
call foo with copy of the address in variable bar
Natürlich kann man in Java Dinge machen, die sich wie CbR anfühlen.
Deshalb ist es für mich auch kein "echtes" CbV. Bei einem echten CbV würde ich erwarten, dass das Objekt kopiert wird. Das Kopieren von Objekten ist jedoch eine Wissenschaft für sich und Gott sei Dank macht Java das nicht :-)
Weil wie wird ein Objekt korrekt kopiert?
Also es ist vernünftig, dass Objekte nicht kopiert werden bei der Übergabe. Allerdings sollte man sich im Klaren sein, dass dennoch die Referenzen auf die Objekte kopiert werden. Das finde ich persönlich allerdings auch nicht schlimm. Ich finde Ausgabe-Parameter nicht wirklich hübsch und die Beispiele von mir halte ich für schlechten Stil.
@Redirion:
Ok, dann weise ich halt "null" zu. Besser?
Ich kann es anders nicht nachweisen.
Du hast nachgewiesen, dass die Referenz auf das Objekt übergeben wird. Ich habe nachgewiesen, dass es lediglich eine Kopie der Referenz ist.
call-by-reference übergibt aber keine Kopien von Referenzen, sondern die Referenzen selbst. Genau das wird bei Java aber nicht gemacht.
Und in Zeile 5 deines main-Methoden-Beispiels wird auch nur die Referenz auf dem Speicher kopiert. Genauso wie es bei der Parameterübergabe passiert. Du hast eine neue Variable mit dem selben Speicherinhalt. Genau das macht Java bei der Parameterübergabe. Dies ist allerdings kein call-by-reference.
call-by-reference heißt ja nicht, dass der übergebene Parameter eine Referenz ist, sondern dass statt dem Wert des Parameters (im Fall einer Referenz/Objekts die Adresse des Objekts) eine Referenz auf den Parameter übergeben wird.
Also wenn Java CbR hätte, dann würde es bei einem Aufruf wie diesem
foo(bar);
sowas draus machen:
call foo with address of variable bar
Aber was macht Java:
call foo with copy of the address in variable bar
Zuletzt bearbeitet: