Java arrays von primitiven Datentypen, call by value or reference?

Werden arrays mit primitiven Datentypen als value oder referenz als argumente übergeben?

Einzelne primitive Datentypen werden als value kopiert, aber wie ist das bei arrays?

hat sich erledigt:

werden als reference übergeben

In Java wird immer und überall ein call by value ausgeführt. In Java gibt es keine Referenzen, es gibt Pointer die fälschlicherweise Referenzen genannt werden.

Du übergibst nicht eine Referenz zu einem Array, du übergibst ein Pointer zu einem Array, und der Pointer wird kopiert.

Um jemanden bei dieser Frage mit einer scheinbar verwirrenden Formulierung dazu zu zwingen, sich mit der nötigen genauigkeit klarzumachen, was dort passiert: Wenn man einen Array an eine Methode übergibt, dann wird dort eine Referenz(!) by Value (!) übergeben.

EDIT: Verwirrend wird das dadurch, dass “Referenz” in Java etwas anderes bedeutet, als das, was bei “call by reference” gemeint ist. Wie Beni schon sagte heißt “Referenz” in Java so viel wie “Pointer” (in C++)

[QUOTE=djmj]Werden arrays mit primitiven Datentypen als value oder reference als argumente übergeben?

hat sich erledigt: werden als reference übergeben[/QUOTE]

Hallo djmj,

in Java sind Arrays stets Objekte, auch wenn man Arrays aus einfachen Datentypen anlegt. Der Zugriff auf die Komponenten des Arrays erfolgt über die Referenz auf das Array-Objekt.

Einfache Datentypen (int, char, …) werden “by value” übergeben, wie Du richtig geschrieben hast. Referenzen werden auch “by value” übergeben. Da sie aber auf Objekte zeigen, wird quasi ein “call by reference” simuliert: der Parameter der Methodendeklaration referenziert dasselbe Objekt wie der Aufrufparameter.

Falls Du das so verstanden hattest, hatte es sich tatsächlich längst erledigt, da wir in dem Fall die gleiche Meinung vertreten :).

Gruß,
André

danke :slight_smile: