[Java] Call-by-Reference?

  • Ich hab gerade im Internet gelesen, dass Java eigentlich kein Call-by-Reference beherrscht.

    Im Grunde ist das nur ein Call-by-Value Aufruf, da die Referenz nicht direkt in die aufrufende Methode übernommen wird. Die Referenz wird nur kopiert.
    Gibts da einen großen Unterschied? Schließlich kann ich ja mit der kopierten Referenz ebenfalls das Objekt am Heap bearbeiten und verändern.

    Quelle

  • Im Beispiel in der Quelle wird in C++ eine Referenz verwendet, das ist grob ausgedrückt ein dereferenzierter Pointer. Im Java-Beispiel wird eine Referenz verwendet. Bei der swap-Methode wird in C++ der dereferenzierte Wert getauscht, in Java die Referenz. Die Java-Referenz ist allerdings eher mit einem Pointer zu vergleichen, die Beispiele sind also nicht direkt vergleichbar. Das Java-Äquivalent zu dem C++-Beispiel würde in der Swap-Methode das übergebene Objekt modifizieren, nicht die Referenz.

    Der Argumentation in dem Beispiel kann ich nicht folgen, Java übergibt Referenzen.

  • Aus der Java Language Specification, Abschnitt 8.4.1

    Zitat

    When the method or constructor is invoked (§15.12), the values of the actual argument expressions initialize newly created parameter variables, each of the declared Type, before execution of the body of the method or constructor.

    D.h. bei nicht-primitiven Typen hast du in der aufgerufenen Methode neue Referenzen auf die übergebenen Objekte.

    Ohne Methodenaufruf entspricht das Folgendem:

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!