Code Objekt in Java -- HILFE

Aufrufe: 122     Aktiv: 15.12.2022 um 08:49

0

Hallo zusammen,

leider verstehe ich nicht ganz, warum 0 ausgegeben wird, obwohl 2 zugewiesen wird?

public class A { private int a;

public void setA(int a){
    this.a = a;
}
public int getA(){
    return a;
}

}

class Question {

public static void main(String[] args) { A a = new A(); m(a); System.out.println(a.getA()); }

public static void m(A a){
    A a1 = new A();
    a1.setA(2); **Hier wird die 2 gesetzt**
    a = a1;   **Hier wird der Wert zugewiesen, ist das nicht 2?**
}

}

Diese Frage melden
gefragt

Student, Punkte: 66

 
Kommentar schreiben
1 Antwort
1

Das Problem liegt bei deinem Setzen der 2.

Das Übergeben des Objekts a in die Funktion m ist in Java immer eine Reference, also ein Pointer bzw. ein Verweis auf dein originales Objekt in der Main. Es wird also keine Kopie erstellt, sondern du bekommst Zugriff auf das Objekt aus der Main.

Jetzt erstellst du ein neues Objekt a1. Bei deiner Zuweisung a = a1; wird nun a auf die Referenz auf a1 geändert. Dein a ist jetzt also quasi das Objekt a1.

Das Objekt a1 existiert aber nur so lange du dich in der Funktion m befindest, danach nicht mehr. Wenn du also die Funktion m verlässt ist das Objekt a1 verschwunden und da a auf a1 zeigt hat damit auch a keinen Bezug mehr zu der gesetzten 2 in der Funktion m. Das Ändern der Objektreferenz in Funktionen ist in Java nicht zulässig/möglich, wenn du die Funktion verlässt ist a wieder die Referenz auf das vorherige a welches in der Main erstellt wurde und durch den Funktionsaufruf unverändert ist, also ist hier wieder a.getA() = 0

Die Lösung ist ganz einfach: Da wie erläutert in der Funktion m das Objekt a eine Referenz ist und damit Zugriff auf das originale a gibt, kannst du hier direkt die zwei setzen. Also

    public static void m(A a)
    {
        a.setA(2);
    }

Hier auch nochmal zum ausführlichen Nachlesen: https://dzone.com/articles/pass-by-value-vs-reference-in-java

Diese Antwort melden
geantwortet

Punkte: 145

 

Vielen herzlichen Dank, könntest du evtl. auch die anderen Fragen anschauen?

  ─   sayuri 15.12.2022 um 08:49

Kommentar schreiben