Java Referenzen und Objekte?

... komplette Frage anzeigen

5 Antworten

Integer b = 10;

darf man erst seit Java 5 so schreiben. Bis dahin musste b entweder der primitive Datentyp int sien oder man erzeugte explizit ein neues Integer-Objekt entweder mit new Integer(10) oder mit Integer.valueOf(5)

Seit Java5 geht das automatisch (Autoboxing), d.h. es wird ein neues Objekt erzeugt und b zeigt darauf. Es wird nicht der Wert des Objekts verändert, auf das a zeigt.

Antwort bewerten Vielen Dank für Deine Bewertung

Wenn Du den internen Wert eines Objektes ändern willst, müsstest Du das ja irgendwie über eine "set" Funktion machen und nicht einfach, indem Du der Variable, die auf das Objekt zeigt, einen neuen Wert übergibst. (Es ist kein Pointer, falls Du aus der C-Welt kommst)

Da ich in der Doc gerade keine set-Funktion für Integer finde, würde ich mal vermuten, dass Dein
b = 10;
als
b = new Integer(10);
interpretiert wird.

Antwort bewerten Vielen Dank für Deine Bewertung

Die Wrapper für einfache Typen in Java sind unveränderlich! :)

Wenn du ...

Integer b = a;

... schreibst, ist b zwar eine Referenz, zeigt aber nicht auf "a", sondern auf ein implizit neu erzeugtes (ebenfalls unveränderliches = immutable) Objekt.

Sinngemäß ist es das gleiche wie ...

Integer b = new Integer(a.intValue());

... der Wert von "a" wird also kopiert!

Und wenn du ...

Integer b = 10;

... schreibst, wird implizit einfach ebenfalls ein neues Wrapper-Objekt angelegt:

Integer b = new Integer(10);

Du kannst den Wert eines einmal erzeugten Wrappers als nicht mehr ändern. Das gilt insbesondere für den Zuweisungsoperator!

Allerdings vermischt deine Frage das Thema "Autoboxing / Unboxing" mit den Themen "Mutability" und "Referenzen", was vermutlich der Grund für deine Verständnisprobleme ist.

Ich kann von daher schon verstehen, dass du leicht verwirrt bist. :)

Aber mach dir keine Sorgen, so kompliziert ist das alles nicht! Frag einfach Google oder Wikipedia nach den oben stehenden fett markierten Themen, dann sollten sich alle Ungereimtheiten klären.

Viel Spaß! :)

Antwort bewerten Vielen Dank für Deine Bewertung

Wenn ich das richtig verstehe verändert sich a nach Initialisierung mit dem Wert 100 nicht mehr. Somit müsste zweimal a = 100 herauskommen

Antwort bewerten Vielen Dank für Deine Bewertung

Teste das ganz mal mit Strings, Arrays und nem eigenen Typ. Das sollten alles Referenzdatentypen sein.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?