# Referenzparameter in Java-Methoden



## The_Unknown (19. Jun 2009)

Hallo,

eine grundsätzliche Frage habe ich da:
Wie funktioniert in Java die Unterscheidung von Referenz- und Wertparametern ?

Angenommen ich habe folgendes:

```
public class Main {

	public static void main(String[] args) throws IOException {
		int a=0;
		method(a);
		System.out.println(a);
	}
	
	private static void method(int a) {
		a++;
	}

}
```

Dann gibt er mir für a 0 aus. Also werden auf eine solche Weise deklarierte Variablen wohl als Werteparameter behandelt, oder ?
Oder ist das nur bei primitiven Datentypen so und verhält sich bei komplexen wie Listen anders ?

Ciao The_Unknown


----------



## Leroy42 (19. Jun 2009)

The_Unknown hat gesagt.:


> Dann gibt er mir für a 0 aus. Also werden auf eine solche Weise deklarierte Variablen wohl als Werteparameter behandelt, oder ?



In Java werden alle Variablen als Wertparameter übergeben, auch die Referenzen
von Objekten.

=> Du kannst den Inhalt übergebener Objekte mittels der übergebenen Referenz verändern; die übergebene Referenz kann sich jedoch nicht ändern!


----------



## The_Unknown (19. Jun 2009)

Mhm, wenn ich das richtig verstanden habe, ist aber a die Referenz zum Hauptspeicherplatz, wo der Wert 0 der gepeichert ist. Diese Referenz übergebe ich an die Methode. Warum wird dann keine Änderung an a gemacht ?


----------



## SlaterB (19. Jun 2009)

primitive Variablen sind keine Referenzen auf einen Speicherplatz sondern stehen immer für sich als Container für einen Wert,

vergleichbares Beispiel zum Parameter:
int a = 4;
int b = a;
a = 5;
// b immer noch 4, b und a zeigen nicht auf dieselbe Speicherstelle oder so


----------



## The_Unknown (19. Jun 2009)

Und wie sieht das bei Listen aus ? Die würden mit der obigen "Method" von mir bearbeitet werden, wenn deren Referenz als Parameter mitgegeben würden ?

Falls ja, wie realisiere ich denn dann einen Werteparameter ? Nur über das Klonen ?

An sich finde ich diese Art des Programmierens ganz schick. Man muss das nur erst mal alles wissen 

Ciao The_Unknown


----------



## faetzminator (19. Jun 2009)

Alle deine Fragen lassen sich mit ja beantworten. Nur sind Strings immutable, d.h. diesen müsstest du zurückgeben oder in der List neu setzen.


----------



## The_Unknown (19. Jun 2009)

aha. kannst du dafür mal ein beispiel angeben ?


----------



## Leroy42 (19. Jun 2009)

The_Unknown hat gesagt.:


> Falls ja, wie realisiere ich denn dann einen Werteparameter ? Nur über das Klonen ?



Jeder Parameter wird als Wertparameter übergeben.

Wenn du zuvor ein Objekt klonst, wird eben *dessen* Referenz
als Wertparameter - also kopiert - übergeben.


----------



## The_Unknown (19. Jun 2009)

OK. Jetzt ist es klar. Dankesehr


----------

