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

Java Strings landen im String Constant Pool

Java-Strings-Pool

Du kennst das. Es ist abends. Du sitzt gemütlich vor dem Fernseher. Das Smartphone bimmelt. Kein Anruf. Nein – Eine Nachricht. Du liest die Nachricht sofort und antwortest darauf. Minuten später bekommst du die nächste Nachricht. Und auch auf diese antwortest du. Im Laufe des Abends entsteht daraus eine nette kleine Konversation. Und eh du […]

Den Java Vererbungsbaum nach dem Ist-Es-Prinzip richtig entwerfen

Java Vererbungsbaum

Vererbungsbaum in Java – klingt erstmal komisch. Dennoch wird dies so bezeichnet. Gemeint sind damit – die einzelnen Hierarchiestufen oder Vererbungsebenen – von der Superklasse bis runter zu den Kindklassen. Wie sieht das nun konkret aus? Vererbung bedeutet: Du definierst einen allgemeinen Typen – zB. Möbel Und dann implementierst du eine Unterklasse, welche die Oberklasse […]

Das Java Leben ist einfacher mit For-Schleife

Java For Schleife Aufbau

In einem anderen Artikeln habe ich bereits über Schleifen in Java gesprochen. In diesem Artikel möchte ich dir eine ganz besondere Schleife vorstellen. Warum ist diese so toll? Sie hat einen integrierten Schleifenzähler. Die Schleife zählt also bei jedem Durchlauf automatisch mit. Aber dazu gleich mehr…. Lass uns einmal so eine For Schleife anlegen.

So nutzt du das Java Keyword public

Java Keyword public

Java Programme bestehen aus Java Klassen. Und der Zugriff auf eine Java Klasse sollte nach außen immer gewährleistet sein. Was bedeutet das? Du solltest in jeder Klasse die Möglichkeit haben, ein Objekt einer anderen Klasse anzulegen. Gerade durch diese Möglichkeit macht doch das ganze Klassenkonstrukt erst Sinn.

Verwalte deine Java Klassen in packages

java klassen verwalten

Es macht durchaus Sinn deine Java Klassen in verschiedenen Paketen zu organisieren. Wieso? Es sprechen mehrere Gründe dafür: Du kannst doppelte Klassennamen verwenden Du kannst deinen Code oder deine Klassen inhaltlich trennen Du kannst Hierarchien abbilden. Und genau um diese Dinge geht es in diesem Beitrag

So kannst du in Java Und Verknüpfung anlegen und auswerten

Java Und

In Java stehen dir eine Menge Operatoren zur Verfügung. Einer dieser Operatoren ist der Und-Operator. Dies ist ein logischer Operator, da dieser sogenannte Wahrheitswerte mit einander verknüpft. Also…. Was erwartet dich in diesem Beitrag? Zuerst möchte ich dir die Aussagenlogik hinter dem Und-Operator zeigen. Also wann sind Aussagen wahr und wann sind diese falsch. Dann […]

So verwendest du in Java try und catch Blöcke

Java try und catch

Ich bereue lieber die Dinge, die ich getan habe – als die Dinge, welche ich gar nicht erst versucht habe. Ja ich würde mich als den typischen „try-and-error-Menschen“ bezeichnen. Was ich will, probiere ich einfach aus und schaue dann erst was passiert. So etwas wie Pläne kenne ich eigentlich nicht. Und wenn ich mal einen […]

Java lernen – 10 nützliche Tipps für Java Anfänger

Java Lernen Anfänger

Wenn du die Programmiersprache Java lernen möchtest, bist du hier prinzipiell erst einmal richtig. Und wenn du es wirklich ernst meinst und in die Java Programmierung einsteigen möchtest, solltest du auch meinen kostenlosen Java Kurs beanspruchen. Wenn du dabei bist, bekommst du: Eine Lektion pro Woche zu den Basics. Hier geht es um die ersten […]