Werttypen und Referenztypen
Primitive Typen (int, boolean, ...) speichern Werte direkt. Referenztypen speichern Verweise auf Objekte auf dem Heap. Zuweisung einer Referenz kopiert den Verweis, nicht das Objekt.
Autoboxing wandelt int in Integer. Gleichheit: == vergleicht bei Referenzen Identität, equals den Inhalt (wenn überschrieben).
Beispiel: Zwei new Integer(1000) sind nicht unbedingt ==, aber equals kann true liefern.
$$x\texttt{.equals}(y)\nRightarrow x\equiv y$$
Wo gebraucht
Autoboxing in Collections, Identität versus Gleichheit in Caches, warum int in hot loops und Integer in Maps landet. In APIs klären Wert-/Referenzsemantik Serialisierung und Gleichheitstests.
Vertiefung
Primitive Java-Werte werden bei Zuweisung als Wert kopiert. Bei Objekten wird die Referenz kopiert, sodass zwei Variablen dasselbe veränderliche Objekt bezeichnen können. Eine Änderung über eine Referenz ist dann über die andere sichtbar.
Parameterübergabe erfolgt immer durch Wertkopie. Bei einem Objektparameter wird also die Referenz als Wert kopiert. Die Methode kann das bezeichnete Objekt ändern, aber eine Neuzuweisung des Parameters ersetzt nicht die Variable des Aufrufers.
Unveränderliche Objekte verringern die Folgen geteilter Referenzen. Aliasing bleibt vorhanden, ist jedoch weniger riskant, weil kein Beobachter den gemeinsamen Zustand verändern kann.
Schwierigkeitsstufen
- Wertkopien und Referenzkopien in Zuweisungen verfolgen.
- Mutation von Parameterneuzuweisung unterscheiden.
- Aliasing durch Unveränderlichkeit oder defensive Kopien kontrollieren.
Fallstricke
Java besitzt keinen Call-by-reference-Mechanismus für lokale Variablen. == vergleicht bei Objekten Referenzen, nicht automatisch deren fachlichen Inhalt.
Tasks
Card Info
- Topic: Algorithmen und Datenstrukturen
- Difficulty: Beginner
- Completed: 0 users