Call by Value / Call by Reference (Parameterübergabe)

Call by Value / Call by Reference

Variablen werden an eine Methode mit Call-By-Value übergeben, wenn der Wert der Variable in die Funktionsvariable, welche im Methodenkopf definiert wurde, kopiert wird.

Variablen werden an eine Methode mit Call-By-Reference übergeben, wenn nur eine Referenz auf die Speicheradresse an die Funktionsvariable übergeben wird, nicht aber der Wert der Variable selbst.


Erklärung

Eine Variable besteht grundlegend aus zwei Teilen. Dem Variablen-Namen und dem Variablen-Wert. Computer speichern dabei Variablen-Werte im Speicher. Leider sind Speicher-Adressen für Menschen nur schwer lesbar. Daher repräsentieren Variablen-Namen schöne, für Menschen lesbare, Ausdrücke, welche auf diese Werte verweisen. So kann zum Beispiel der Variablen kontostand sofort eine Bedeutung zugewiesen werden, während dies bei 0101110010... nur schwer möglich ist. Neben dem Wert und dem menschenlesbaren Namen gibt es noch eine Referenz. Diese zeigt auf die Adresse im Speicher, wo der Variablen-Wert gespeichert ist.

Call by Value

Variablen werden beim Methoden-Aufruf an eine Methode mit Call-By-Value übergeben, wenn der Variablen-Wert in den Variablen-Wert der Funktionsvariable kopiert wird.

Sieh dir folgendes Beispiel an:

Der Variablen-Wert ist hier das Getränk. Der Trinkhalm ist die Variablen-Referenz.

Beim Methoden-Aufruf wird der Variablen-Wert kopiert die Referenz in die Funktionsvariable kopiert. Bei Änderungen an der Funktionsvariable, der Kopie, ändert sich nichts an der Ursprungsvariable. Jan kann also in Ruhe sein Getränk genießen.

Call by Reference

Variablen werden beim Methoden-Aufruf an eine Methode mit Call-By-Reference übergeben, wenn nur die Referenz auf den Variablen-Wert im Speicher übergeben wird.

Betrachte erneut folgendes Beispiel:

Beim Methoden-Aufruf wird nur die Referenz (der Trinkhalm) kopiert. Es existieren folglich zwei Variablen mit Referenzen auf denselben Variablen-Wert im Speicher. Wird nun aus einem der beiden Trinkhalme getrunken, so leert sich die Flasche. Es wird von beiden Instanzen derselbe Variablen-Wert verändert.

Methodenaufrufe in Java

Im Gegensatz zu vielen anderen Programmiersprachen gibt es in Java nur Call-by-Value. Das kann vorteilhaft sein. Es ist jedoch immer wichtig, dass du dir bewusst machst, wie Referenzen beim Methodenaufruf gehandhabt werden. So kannst du in Java eben kein Call-by-Reference nutzen und so keine Variablen-Referenz an eine Methode übergeben.


Beispiel

Jan hat Hunger. Daher definiert er sich eine Methode eatFood, welche ein Essen als String entgegennimmt und true zurückgibt, wenn das Essen ausreichend war sowie false, wenn das Essen nicht ausreichen war.

Wenn der String food also nicht leer ist (food != ""), dann setzt die Methode den String gleich dem leeren String food = "" (das Essen wurde gegessen) und gibt true zurück. Wenn der String bereits leer war, wird false zurückgegeben.

Hier versteckt sich noch mehr!
Besuche die App, um alle Inhalte zu sehen!

Nach der Methodendefinition kann Jan diese endlich aufrufen und seinen Burger essen:

Hier versteckt sich noch mehr!
Besuche die App, um alle Inhalte zu sehen!

Beim Methodenaufruf wird der Variablen-Wert der Variable burger in die Methodenvariable food kopiert. Da burger nicht leer war, wird die Bedingung food != "" zu true ausgewertet. Der Burger wird gegessen, indem food jetzt auf den leeren String "" gesetzt wird und Jan ist happy (es wird true zurückgegeben).

Beim Methoden-Aufruf ist jedoch etwas Merkwürdiges passiert: die Variable isJanHappy hat nun den Wert true, das Essen war erfolgreich, jedoch ist der Wert der Variable burger weiterhin "Burger". Wie kann das sein?

In Java arbeiten alle Parameterübergaben mit Call-by-Value. Da der Wert "Burger" aus der Variablen burger nur in die Variable food kopiert wurde, bleibt diese außerhalb der Methode unverändert. Es wurde nur food innerhalb der Methode auf leer gesetzt. Dies hatte keine Auswirkungen auf die Variable burger.

Dank Call-by-Value kann Jan also so oft die Methode aufrufen wie er möchte, sein Burger wird nie verschwinden.

No items found.

simpleclub ist am besten in der App.

Mit unserer App hast du immer und überall Zugriff auf: Lernvideos, Erklärungen mit interaktiven Animationen, Übungsaufgaben, Karteikarten, individuelle Lernpläne uvm.

Jetzt simpleclub Azubi holen!

Mit simpleclub Azubi bekommst du Vollzugang zur App: Wir bereiten dich in deiner Ausbildung optimal auf deine Prüfungen in der Berufsschule vor. Von Ausbilder*innen empfohlen.

Jetzt simpleclub Azubi holen