ProgrammationDéveloppeur Backend

Expliquez comment fonctionne le mécanisme d'autoboxing et d'unboxing en Java, quels sont les risques et où cela peut entraîner des erreurs de performances ou de logique.

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

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 :

  • Possibilité de NullPointerException lors de l'unboxing de null ;
  • Utilisation inefficace de la mémoire et du temps en raison de la création constante d'objets enveloppants ;
  • Complexités avec == (comparaison par référence) et equals.

Question piège.

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.

Exemples d'erreurs réelles dues à l'ignorance des subtilités du sujet.


Histoire

Le calcul des sommes dans une collection d'enveloppes Integer. Chaque fois que la somme augmentait, un nouvel objet Integer était créé, entraînant des délais significatifs sur un serveur réel au lieu d'utiliser int.

Histoire

Un programmeur a utilisé 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.