0Pricing
Java Academy · Lektion

Stolperfallen beim Autoboxing

Null-Unboxing und Fallen bei ==

Stolperfallen beim Autoboxing ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Bequemlichkeit hat ihre Tücken

Autoboxing macht Code übersichtlicher, verbirgt aber Konvertierungen, die zu überraschenden Fehlern führen können. Die beiden größten Fallen sind Unboxing von null und der Identitätsvergleich mit ==.

In dieser Lektion erfahren Sie, wie Sie beides vermeiden.

Die Falle beim Unboxing von null

Wenn ein Wrapper null enthält und Sie ihn in einen primitiven Wert entpacken, löst Java eine NullPointerException aus.

Das wird leicht übersehen, weil der Code wie eine einfache Zuweisung aussieht.

public class Main {
    public static void main(String[] args) {
        Integer maybe = null;
        try {
            int value = maybe;
            System.out.println(value);
        } catch (NullPointerException e) {
            System.out.println("Cannot unbox null!");
        }
    }
}

null in arithmetischen Ausdrücken

Diese Falle tritt auch innerhalb von Ausdrücken auf. Ein Wrapper mit dem Wert null wird vor der Berechnung entpackt. Dadurch wird eine Ausnahme ausgelöst, bevor die Berechnung überhaupt beginnt.

public class Main {
    public static void main(String[] args) {
        Integer count = null;
        try {
            int total = count + 5;
            System.out.println(total);
        } catch (NullPointerException e) {
            System.out.println("Null in arithmetic!");
        }
    }
}

null absichern

Prüfen Sie einen Wrapper immer auf null, bevor Sie ihn entpacken, oder stellen Sie einen Standardwert bereit.

public class Main {
    public static void main(String[] args) {
        Integer maybe = null;
        int safe = (maybe != null) ? maybe : 0;
        System.out.println(safe);
    }
}

Die Überraschung beim ==-Cache

Integer.valueOf speichert Werte von -128 bis 127 im Cache. Daher können zwei Werte in diesem Bereich dasselbe Objekt gemeinsam verwenden, und == gibt true zurück.

public class Main {
    public static void main(String[] args) {
        Integer a = 100;
        Integer b = 100;
        System.out.println(a == b);
    }
}

Außerhalb des Caches

Oberhalb des Cache-Bereichs erzeugt jeder Boxing-Vorgang ein eigenes Objekt. Nun vergleicht == Referenzen und gibt false zurück, obwohl die Zahlen gleich sind.

public class Main {
    public static void main(String[] args) {
        Integer a = 200;
        Integer b = 200;
        System.out.println(a == b);
    }
}

Immer equals verwenden

Da == bei Wrappern die Objektidentität vergleicht, müssen Sie .equals() verwenden, um die tatsächlichen numerischen Werte zu vergleichen.

public class Main {
    public static void main(String[] args) {
        Integer a = 200;
        Integer b = 200;
        System.out.println(a.equals(b));
    }
}

== mit einem primitiven Datentyp kombinieren

Wenn eine Seite von == ein primitiver Datentyp ist, entpackt Java den Wrapper, sodass der Vergleich wertbasiert erfolgt. Das ist zuverlässig, kann aber weiterhin eine Ausnahme auslösen, wenn der Wrapper null ist.

public class Main {
    public static void main(String[] args) {
        Integer a = 200;
        int b = 200;
        System.out.println(a == b);
    }
}

Verstecktes Boxing in Schleifen

Wenn Sie den Akkumulator einer Schleife als Wrapper deklarieren, wird bei jeder Iteration ein neues Objekt erzeugt. Im folgenden Beispiel würde die Verwendung von Long statt long wiederholt Boxing auslösen. Bevorzugen Sie den primitiven Datentyp.

public class Main {
    public static void main(String[] args) {
        long sum = 0;
        for (int i = 0; i < 1000; i++) {
            sum += i;
        }
        System.out.println(sum);
    }
}

Map.get liefert null

Ein häufiger Fehler in der Praxis: Map.get liefert für einen fehlenden Schlüssel null. Das Unboxing dieses Ergebnisses in ein int löst eine Ausnahme aus. Verwenden Sie stattdessen getOrDefault.

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        Map<String, Integer> scores = new HashMap<>();
        int score = scores.getOrDefault("missing", 0);
        System.out.println(score);
    }
}

Sicher bleiben

Zwei Gewohnheiten verhindern die meisten Autoboxing-Fehler: Entpacken Sie niemals einen Wert, der null sein könnte, und vergleichen Sie Wrapper-Werte immer mit .equals() statt mit ==.

Kurzer Test

Testen Sie Ihr Bewusstsein für die Fallstricke des Autoboxing.

Zusammenfassung

Sie haben die wichtigsten Fallstricke des Autoboxing kennengelernt:

  • Das Unboxing eines null-Wrappers löst eine NullPointerException aus
  • Schützen Sie sich mit einer Nullprüfung oder einem Standardwert
  • == vergleicht bei Wrappern Referenzen; für Werte von -128 bis 127 gibt es Caching
  • Verwenden Sie für den Wertvergleich immer .equals()
  • Verwenden Sie getOrDefault, um null bei Map-Abfragen zu vermeiden

Häufig gestellte Fragen

Ist die Lektion „Stolperfallen beim Autoboxing“ kostenlos?

Ja — der vollständige Text von „Stolperfallen beim Autoboxing“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Stolperfallen beim Autoboxing“?

Null-Unboxing und Fallen bei == Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Java Academy zu starten?

Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Stolperfallen beim Autoboxing“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?

Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Primitive oder Wrapper-Typen
  2. Autoboxing und Unboxing
  3. Parsen und Valueof
  4. Stolperfallen beim Autoboxing
← Zurück zu Java Academy