Wie muss eine als Parameter übergebene Variable definiert sein, dass Veränderungen an diesem Parameter innerhalb der Methode, nach dem Methodenaufruf erhalten bleiben?

Bei primitiven Datentypen wird der Wert einer Variable a einer Methode als Kopie übergeben. Innerhalb der Methode wird mit dieser Kopie gearbeitet. Der Wert der Kopie von a kann in der Methode verändert werden, ohne dass sich der Wert von a ändert. Möchte man auf den veränderten Wert der Kopie von a außerhalb der Methode zugreifen, muss dieser Wert mit return zurückgegeben werden.

Bei Objekten wie beispielsweise Arrays wird einer Methode eine Kopie der Referenz auf das Objekt übergeben. Es gibt also nur ein Objekt, auf das mehrere Referenzen verweisen. Werden innerhalb der aufgerufenen Methode Veränderungen im Objekt vorgenommen, manifestieren sich diese Veränderungen auch außerhalb.

static void f1(int x) {
    x++;
}

static int f2(int x) {
    x++;
    return x;
}

static void f3(int a[]) {
    a[0]++;
}

public static void main(String[] args) {
    int x = 123;
    f1(x);
    System.out.println(x);    // Ausgabe: 123
    x = f2(x);
    System.out.println(x);    // Ausgabe: 124
    int a[] = { 123 };
    f3(a);
    System.out.println(a[0]); // Ausgabe: 124
}

In der Methode f1() wird auf der Kopie der Variable x gearbeitet. Der Wert der in Zeile 15 deklarierten Variable ändert sich nicht.

In der Methode f2() wird der veränderte Wert zurückgegeben und kann dadurch auch außerhalb der Methode verwendet werden.

In der Methode f3() wird die Referenz auf das Array a übergeben. Änderungen am Array sind auch außerhalb der Methode sichtbar.