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
Link
geantwortet
vetox
Punkte: 160
Punkte: 160
Vielen herzlichen Dank, könntest du evtl. auch die anderen Fragen anschauen?
─
sayuri
15.12.2022 um 08:49
Markdown wird unterstützt.