Autoboxing — c'est la conversion automatique des types primitifs (int, double, etc.) en leurs objets enveloppants correspondants (Integer, Double, etc.). Unboxing — la conversion inverse d'un objet enveloppant en un primitif.
Cela fonctionne automatiquement lors de l'affectation, des arguments de méthode et des collections:
List<Integer> numbers = new ArrayList<>(); numbers.add(5); // Exemple d'autoboxing : 5 (int) -> Integer(5) int value = numbers.get(0); // Unboxing : Integer(5) -> 5
Risques :
Le code suivant peut-il déclencher une exception ? Pourquoi ?
Integer x = null; int y = x;
Réponse : Le code déclenche un NullPointerException, car lors de l'exécution de int y = x;, un unboxing de null vers un primitif se produit, et null ne peut pas être converti en int.
Histoire
int.Histoire
Integer comme clé pour un cache, sans tenir compte que les valeurs -128...127 sont mises en cache, tandis que les autres ne le sont pas. Cela a conduit à des résultats incorrects avec ==, ce qui a entraîné une suppression incorrecte des données du cache.Histoire
Dans l'API REST, des valeurs nullables arrivaient. Un simple unboxing de l'Integer entrant a parfois entraîné un crash en raison d'un null inattendu au lieu d'un nombre du client.