# Methode, die Variable verändert ?



## babuschka (27. Mrz 2008)

Hallo zusammen!   

Ich habe eine kleine Frage.

Mir ist folgendes aufgefallen:
Habe ich eine int-Variable, die ich einer Methode übergebe, so kann die Methode diese nicht ändern.
Bei einem integer array dagegen schon.

Das "Phänomen" als Code-Schnipsel:

```
public class Test {

  public static void changeInt(int a) {
    a = 0;
  }
  
  public static void changeIntArray(int[] b) {
    b[0] = 0;
  }

  public static void main(String[] args) {
    int a = 1;
    Test.changeInt(a);
    System.out.println(a);   // gibt 1 aus, da Variable durch Methode nicht verändert wurde
    
    int[] b = new int[1];
    b[0] = 1;
    Test.changeIntArray(b);
    System.out.println(b[0]);  // gibt 0 aus, da array-Eintrag durch Methode geändert wurde
  }
}
```
Wer kann mir dieses "Phänomen" erklären?   

Vielen Dank im voraus!


Schöne Grüße,
Rouven


----------



## Marco13 (27. Mrz 2008)

Die FAQ: http://www.java-forum.org/de/viewtopic.php?t=5390


----------



## Reality (27. Mrz 2008)

Du übergibst nur eine Kopie der Werte der Variablen und keine Referenz zum Original. Weshalb das bei dem Array funktionieren soll, ist mir auch ein Rätsel.

Es gibt zwei Möglichkeiten um dein Vorhaben durchzuführen: Entweder du deklarierst deine Variablen public, oder du gibst die geänderten Variablen in der Methode zurück.

Außerdem wäre es sinnvoller ein Objekt deiner Klasse anzulegen. So müssen deine Methoden nicht static sein.

Test testklasse = new Test()
testklasse.bla...

Liebe Grüße
Reality


----------



## JavaFred (28. Mrz 2008)

Reality hat gesagt.:
			
		

> Du übergibst nur eine Kopie der Werte der Variablen und keine Referenz zum Original. Weshalb das bei dem Array funktionieren soll, ist mir auch ein Rätsel.


Weil Arrays Referenztypen sind. D.h. eine Array-Variable speichert kein Array, sondern eine Referenz auf ein Array-Objekt. Es wird also eine Kopie der Referenz an die Methode übergeben. Deswegen kann man die VARIABLE ebenfalls nicht erfolgreich ändern (versuch mal, dem formalen Parameter eine Referenz auf ein neues Array-Objekt zuzuweisen), aber man kann über die Referenz das ARRAY-OBJEKT ändern.


----------



## babuschka (28. Mrz 2008)

Danke für die schnellen und kompetenten Antworten, super Forum!   

Jetzt ist es mir klar geworden, wie dieser Unterschied bei primitiven Datentypen und Referenztypen zustande kommt.


Schöne Grüße,
Rouven


----------

