Skip to main content

Achte bei Java Methoden stets auf die Wertübergabe

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.

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.

Na wie sieht’s bei dir aus?
Hast du noch Fragen oder Anregungen zur Wertübergaben in Java Methoden?

Schreib mir doch einen Kommentar unter diesen Beitrag.


Ähnliche Beiträge

Heap & Stack – Die Speicherverwaltung in Java

Java Speicher

Java nutzt eine interne Speicherverwaltung. Eigentlich sind es mehrere. Uns interessieren lediglich zwei. Da das Thema Speicherverwaltung recht umfangreich ist, habe ich dir im Folgenden einmal die wichtigsten Artikel zusammengestellt. Die zwei Speichersysteme von Java Java Methoden werden auf dem Stack gestapelt. Der Speicher auf dem Java Methoden zu Hause sind, nennt sich Stack Speicher. […]

Polymorphie bringt Vorteile für Java Arrays

Java Polymorphie Arrays

Wenn Java Arrays, Schubladen oder Container sein sollen… Dann wäre der Gebrauch einer solchen Schublade ziemlich einseitig und festgefahren. Denn in jedes Array passen zwar mehrere Daten – aber immer nur vom gleichen Datentyp. Immer gleicher Datentyp? Also eine Schublade nur für Socken, Unterwäsche und der ganze andere Kram passt dann eben nicht hinein. Um […]

So verwendest du den Java Oder Operator

Java Oder Operator

Kennst du das auch aus deiner Schulzeit? Du schreibst eine Klassenarbeit in irgendeinem Fach. Nehmen wir einfach mal an – Mathe. Jetzt bist gerade fertig mit deiner Arbeit. Und zu Hause wirst du gefragt: „Und wie lief es?“ Du antwortet:“ Ganz gut. Es wird bestimmt eine Eins oder eine Zwei.“ Drei oder vier Tage später […]

So kannst du in drei einfachen Schritten Java Arrays dynamisch vergrößern

Java Arrays vergrößern

Es ist der 31.März 1727. Es ist ein Montag. Die Welt nimmt Abschied von einem sehr bedeutenden Weltveränderer. Seine Sichtweisen beeinflussen, heute noch, die Forschung und Entwicklung im Bereichen der Physik und Chemie. Ja selbst unser aller Leben – unsere Sicht auf die alltäglichen Dinge – wurden durch seine Denkstöße revolutioniert. Dieser große Vorreiter starb […]

So kannst du Java Methoden überladen

Java Methoden überladen

Im Mittelalter war es üblich, dass Könige oder Adlige Briefe durch ein Siegel verschlossen. Das Siegel hatte die Aufgabe den Inhalt des Briefes vor dem gewaltsamen Öffnen zu schützen. Außerdem hatte das Siegel die Aufgabe einen Eigentumsnachweis sicher zu stellen. Und jeder, welcher das Siegel des Königs sah, wusste: „Das königliche Siegel – Oh ein […]

So erstellst du deine ersten Java Klassen mit Eclipse

Java Klassen sind Baupläne für Java Objekte. Und da Java eine objektorientierte Programmiersprache ist, sind Java Klassen somit ein elementarer Bestandteil. In diesem Beitrag möchte ich dir zeigen, wie du eine Java Klasse in Eclipse erstellen kannst. Ich möchte dir außerdem zeigen, was physikalisch in deinem Projekt passiert. Ganz zum Schluss zeige ich dir noch, […]

Java Übung: Alles beginnt mit Hello World

Java Übung Hello World

Alles beginnt mit „Hello World“. Sämtliche Java Bücher beginnen mit diesem ersten Beispiel. Auch die Java Übungen sollen mit diesem ersten Programm starten. Definiere eine Klasse „Hello World“. Implementiere die Main Methode. Die Main Methode soll bei Programmaufruf die Bildschirmanzeige „Hallo Welt“ zurückgeben. Die Lösung zur Java Übung „Hallo Welt“ public class HelloWorld{ public static […]