So funktioniert die Wertübergabe von Methoden in Java Programmen
Ich lege gleich los….
Schau dir diesen Code einmal an.
Welche Zahl wird wohl auf der Bildschirmanzeige zurückgegeben?
public class MethodenWertUebergabe {
static int verdoppele (int i){
i=i*2;
return i;
}
public static void main(String[] args) {
int i = 2;
verdoppele(i);
System.out.println(i);
}
}
Na hast du es ausprobiert?
Es wird die Zahl zwei zurückgegeben.
Und das obwohl der Parameter ganz deutlich der Java Methode übergeben wurde.
Na was ist denn das los?
Lass uns die Methode um eine Bildschirmausgabe erweitern.
Diese Bildschirmausgabe soll den Wert innerhalb der Methode zurückgeben.
public class MethodenWertUebergabe {
static int verdoppele (int i){
i=i*2;
System.out.println("Wert innerhalb der Methode: "+i);
return i;
}
public static void main(String[] args) {
int i = 2;
verdoppele(i);
System.out.println("Wert außerhalb der Methode: "+i);
}
}
Wenn du jetzt das Java Programm startest, dann siehst du
- Dass der Wert innerhalb der verdoppeln-Methode 4 ist.
- Aber außerhalb dieser Methode ist er wieder zwei.
Und warum das so ist – Ja darum geht in diesem Beitrag.
Inhalt
In Java Methoden werden Werte lediglich als Kopie übergeben.
Das Prinzip heißt „call by value“ oder auch „call by copy“.
Das bedeutet, dass der Wert von „i“ aus der main-Methode kopiert wird.
Und diese Kopie wird dann in die verdoppele-Methode gesteckt.
In der „verdoppele-Methode“ wird dann die Kopie des Wertes „i“ verdoppelt.
Und außerhalb dieser Java Methode wird die Variable wieder zerstört.
Wir haben bereits im Java Kurs über lokale Variablen gesprochen.
Lokale Variablen existieren nur innerhalb der Methoden, in welchen sie übergeben werden.
Und dieses „i“, ist so eine lokale Variable.
Deutlich wird dies, wenn ich den Parameter nicht i nenne, sondern ganz anders.
Denn es ist lediglich Zufall oder böse Absicht meinerseits, dass die lokale Variable i hieß.
Ich nenne die Variable einfach mal um.
Und nenne diese jetzt „lokaleVariable“.
public class MethodenWertUebergabe {
static int verdoppele (int lokaleVariable){ //lokale Variable in der Parameterliste
lokaleVariable=lokaleVariable*2;
System.out.println("Wert innerhalb der Methode: "+lokaleVariable);
return lokaleVariable;
}
public static void main(String[] args) {
int i = 2; //auch diese i ist eine lokale Variable
verdoppele(i);
System.out.println("Wert außerhalb der Methode: "+i);
}
}
Ich glaube so wird besser deutlich, dass beide Variablen unterschiedlich sind.
Sie nehmen lediglich für eine sehr kurze Zeit den gleichen Wert an.
Und somit wird auch deutlich, dass Java Methoden, Werte nicht ohne Weiteres übergeben.
Ja was kannst du machen?
Die Wertrückgabe der Java Methoden kannst du in die Bildschirmanzeige einpflegen.
Du kannst die Rückgabewerte von Java Methoden in die Bildschirmausgabe einbinden.
Wichtig ist, dass die Java Methoden auch Rückgabewerte haben – Also keine void-Methoden.
In meinem Fall wurde Integer als Rückgabewert vereinbart.
Also los..
public class MethodenWertUebergabe {
static int verdoppele (int lokaleVariable){
lokaleVariable=lokaleVariable*2;
System.out.println("Wert innerhalb der Methode: "+lokaleVariable);
return lokaleVariable;
}
public static void main(String[] args) {
int i = 2;
System.out.println("Wert außerhalb der Methode: "+verdoppele(i));//Rückgabe direkt in der Anweisung
}
}
Du kannst aber auch die Rückgabewerte anderen Java Methoden übergeben.
Ich verdoppele den Wert nochmal.
Ich implementiere somit eine weitere Methode, namens „verdoppeleNochmal“.
Und diese Methode ruft, im Methodenrumpf, die erste Methode (verdoppele) auf und übergibt dieser den Wert.
public class MethodenWertUebergabe {
static int verdoppele (int lokaleVariable){
lokaleVariable=lokaleVariable*2;
System.out.println("Wert verdoppelt: "+lokaleVariable);
return lokaleVariable;
}
static int verdoppeleNochmal(int wert){
wert=(verdoppele(wert))*2;
System.out.println("Wert nochmal verdoppelt: "+wert);
return wert;
}
public static void main(String[] args) {
int i=2;
System.out.println("Wert außerhalb der Methode: "+verdoppeleNochmal(i));//Bildschirmausgabe
}
}
Und so sollte es laufen.
Zusammenfassung:
- In Java Methoden werden Werte lediglich als Kopie übergeben.
- Die Wertübergabe wird auch als „call by value“ bezeichnet.
- Da es sich lediglich um Kopien handelt, existieren die kopierten Werte außerhalb der Java Methoden nicht.
- Du kannst Methoden allerdings in anderen Java Methoden aufrufen.
Die Rückgabewerte kannst du dann weiterverarbeiten.