Michael: Array wird von Methode überschrieben

Hallo!

Ich experimentiere gerade ein wenig mit Java. Dabei ist mir aufgefallen, dass eine Methode ganz einfach ein Array verändern kann, das an sie übergeben wurde.
Beispiel:

public class Test {
  static void test (int[] zahlenreihe) {
    // in der Methode wird das Array zahlenreihe verändert
  }
  public static void main (String[] args) {
    // Das Array zahlenreihe wird erstellt und mit Werten gefüllt
    test (zahlenreihe);
    // Beim anschließenden Ausgeben der einzelnen Arrayfelder haben sie die Werte, wie sie in der Methode test verändert wurden.
  }
}

Wie kann das sein? Ich habe bisher immer gelesen, dass nur der Inhalt der Variablen an eine Methode übergeben werden. Dort werden sie dann in eine lokale Variable gespeichert - nach Ablauf der Methode müssten sie also wieder die alten Werte haben, oder nicht?

Mir würde auch ein Link reichen, wo das ganze genauer erklärt wird. Im Internet habe nichts gefunden außer dem, was ich oben beschrieben habe.

Danke schonmal,
Michael

  1. Hallo Michael.

    Arrays werden in Java "by reference" übergeben, sind also so etwas wie "versteckte" Zeiger (um mal im C-Jargon zu bleiben).

    1. Hallo,

      Arrays werden in Java "by reference" übergeben, sind also so etwas wie "versteckte" Zeiger (um mal im C-Jargon zu bleiben).

      Danke, das erklärt das Verhalten natürlich. Muss ich, um dies zu vermeiden, das Array dann in der Methode duplizieren, oder gibt es auch noch die Möglichkeit, direkt nur die Werte des Arrays zu übergeben?

      Danke schonmal für die Antwort!
      Michael

      1. Hallo,

        Arrays werden in Java "by reference" übergeben, sind also so etwas wie "versteckte" Zeiger (um mal im C-Jargon zu bleiben).

        Arrays sind in Java ja auch Objekte. Und die werden ebenso als Referenz
        übergeben.

        Genaugenommen werden Objekte bzw. Arrays ansich ja gar nicht als Referenz
        übergeben. Vielmehr wird die Referenz (aka Pointer) auf das Objekt oder
        das Array übergeben. Der Pointer wird dabei kopiert. Nur zeigt eben
        der kopierte Pointer genauso weiter auf dasselbe Objekt/Array.
        (Die Referenz selbst kann man aber innerhalb der Methode ändern. Darauf-
        hin ändert sich die Referenz im aufrufenden Programmcode nicht.)

        Danke, das erklärt das Verhalten natürlich. Muss ich, um dies zu vermeiden, das Array dann in der Methode duplizieren, oder gibt es auch noch die Möglichkeit, direkt nur die Werte des Arrays zu übergeben?

        Du mußt die Daten in irgend einer Form explizit duplizieren, wenn du
        eine Kopie haben möchtest.

        Gruß
        Slyh