Java Academy · Les

Valkuilen van autoboxing

Null-unboxing en valkuilen met ==

Les 4 van 413 stappen

Valkuilen van autoboxing is een gratis Java Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.

Gemak heeft valkuilen

Autoboxing maakt code overzichtelijker, maar verbergt conversies die verrassende fouten kunnen veroorzaken. De twee grootste valkuilen zijn unboxing van null en identiteitsvergelijking met ==.

In deze les leer je beide te vermijden.

De valkuil van null bij unboxing

Als een wrapper null bevat en je deze uitpakt naar een primitief type, veroorzaakt Java een NullPointerException.

Dit is gemakkelijk over het hoofd te zien, omdat de code eruitziet als een eenvoudige toewijzing.

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 bij berekeningen

De valkuil doet zich ook voor in expressies. Bij het optellen van een wrapper met null wordt deze eerst uitgepakt, waardoor een uitzondering ontstaat voordat de berekening zelfs maar wordt uitgevoerd.

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!");
        }
    }
}

Bescherming tegen null

Controleer een wrapper altijd op null voordat je deze uitpakt, of geef een standaardwaarde op.

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

De verrassing van de ==-cache

Integer.valueOf bewaart waarden van -128 tot en met 127 in de cache. Twee ingepakte waarden binnen dat bereik kunnen dus hetzelfde object delen, waardoor == true teruggeeft.

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

Buiten de cache

Boven het cachebereik maakt elke boxing-bewerking een afzonderlijk object. Nu vergelijkt == verwijzingen en geeft het false terug, ook al zijn de getallen gelijk.

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

Gebruik altijd equals

Omdat == bij wrappers de objectidentiteit vergelijkt, moet je .equals() gebruiken om de werkelijke numerieke waarden te vergelijken.

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

== combineren met een primitief type

Als één kant van == een primitief type is, unboxt Java de wrapper, zodat de vergelijking op waarde gebeurt. Dit is betrouwbaar, maar kan nog steeds een fout veroorzaken als de wrapper null is.

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

Verborgen boxing in lussen

Als je een accumulator voor een lus als wrapperklasse declareert, ontstaat er bij elke iteratie een nieuw object. Hieronder zou het gebruik van Long in plaats van long herhaaldelijk boxing veroorzaken. Geef de voorkeur aan het primitieve type.

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 retourneert null

Een veelvoorkomende bug uit de praktijk: Map.get retourneert null voor een ontbrekende sleutel. Als je dat resultaat naar een int unboxt, ontstaat er een fout. Gebruik in plaats daarvan 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);
    }
}

Veilig blijven

Twee gewoonten voorkomen de meeste fouten met autoboxing: unbox nooit een waarde die mogelijk null is en vergelijk wrapperwaarden altijd met .equals() in plaats van met ==.

Korte controle

Controleer of je de valkuilen van autoboxing herkent.

Samenvatting

Je hebt de belangrijkste valkuilen van autoboxing geleerd:

  • Het unboxen van een null-wrapper veroorzaakt een NullPointerException
  • Bescherm dit met een null-controle of een standaardwaarde
  • == vergelijkt bij wrappers verwijzingen, waarbij waarden van -128 tot en met 127 uit een cache kunnen komen
  • Gebruik altijd .equals() om waarden te vergelijken
  • Gebruik getOrDefault om null bij het opzoeken in een map te voorkomen
Gratis beginnen

Leer Java met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
104
Lessen
374

Veelgestelde vragen

Is de les “Valkuilen van autoboxing” gratis?

Ja — de volledige tekst van “Valkuilen van autoboxing” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.

Wat leer ik in “Valkuilen van autoboxing”?

Null-unboxing en valkuilen met == Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Java Academy te beginnen?

Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Valkuilen van autoboxing”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Java Academy?

Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Primitieve versus wrappertypen
  2. Autoboxing en unboxing
  3. Parsen en valueOf
  4. Valkuilen van autoboxing
← Terug naar Java Academy