ProgrammierungBackend Entwickler

Erklären Sie, wie der Mechanismus des Autoboxing und Unboxing in Java funktioniert, welche Risiken damit verbunden sind und wo es zu Leistungs- oder Logikfehlern kommen kann.

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort.

Autoboxing ist die automatische Umwandlung primitiver Typen (int, double usw.) in die entsprechenden Wrapper-Objekte (Integer, Double usw.). Unboxing ist die Rückumwandlung des Wrapper-Objekts zurück in den primitiven Typ.

Es funktioniert automatisiert bei Zuweisungen, Methodenargumenten und in Sammlungen:

List<Integer> numbers = new ArrayList<>(); numbers.add(5); // Beispiel für Autoboxing: 5 (int) -> Integer(5) int value = numbers.get(0); // Unboxing: Integer(5) -> 5

Risiken:

  • Möglicher NullPointerException beim Unboxing von null;
  • Ineffiziente Nutzung von Speicher und Zeit aufgrund der ständigen Erstellung von Wrapper-Objekten;
  • Schwierigkeiten mit == (Referenzvergleich) und equals.

Fangfrage.

Kann der folgende Code eine Ausnahme auslösen? Warum?

Integer x = null; int y = x;

Antwort: Der Code wirft NullPointerException, weil beim Versuch, int y = x; auszuführen, ein Unboxing von null in den primitiven Typ stattfindet, und null kann nicht in int umgewandelt werden.

Beispiele für reale Fehler aufgrund mangelnden Wissens über die Feinheiten des Themas.


Geschichte

Berechnung von Summen in einer Sammlung von Integer-Wrappern. Jedes Mal, wenn die Summe erhöht wurde, wurde ein neues Integer-Objekt erstellt, was in einem realen Server zu erheblichen Verzögerungen führte, anstatt int zu verwenden.

Geschichte

Ein Programmierer verwendete Integer als Schlüssel für den Cache, ohne zu berücksichtigen, dass die Werte -128...127 zwischengespeichert werden, während andere dies nicht tun. Dadurch begann == plötzlich falsche Ergebnisse zu liefern, was zu falschen Löschungen von Daten im Cache führte.

Geschichte

In der REST-API kamen nullable Werte an. Einfaches Unboxing des empfangenen Integers führte manchmal aufgrund eines unerwarteten null anstelle einer Zahl vom Client zum Absturz.