Aller au contenu

Java — Integer Cache

Le Integer Cache est un mécanisme interne de Java souvent méconnu… mais qui peut facilement piéger, surtout lors des comparaisons avec ==.


Idée simple

Java met en cache certaines valeurs de Integer pour optimiser les performances.

Concrètement :

  • les entiers entre -128 et 127 sont réutilisés
  • au lieu de créer un nouvel objet à chaque fois

Exemple simple

Integer a = 100;
Integer b = 100;

System.out.println(a == b); // true

Pourquoi true ?

  • 100 est dans l’intervalle [-128, 127]
  • Java utilise le même objet en mémoire
  • donc a et b pointent vers la même référence

Exemple piégeux

Integer a = 200;
Integer b = 200;

System.out.println(a == b); // false

Pourquoi false ?

  • 200 est hors du cache
  • Java crée deux objets distincts
  • donc références différentes

Visualisation mentale

Quand tu écris :

Integer x = 100;

Java fait en réalité :

Integer x = Integer.valueOf(100);

Et cette méthode :

  • retourne un objet en cache si possible
  • sinon crée un nouvel objet

Le mécanisme derrière

Le cache est géré par :

Integer.IntegerCache

Elle stocke les objets entre -128 et 127.


Attention avec ==

Le piège classique :

penser que == compare les valeurs

  • Faux

== compare les références

Et le cache peut donner l’illusion que ça fonctionne.


Comparaison correcte

Integer a = 200;
Integer b = 200;

System.out.println(a.equals(b)); // true

.equals() compare le contenu → toujours fiable


Pièges fréquents

  • croire que == fonctionne pour comparer des Integer
  • oublier l’existence du cache
  • se faire tromper par les valeurs “qui marchent parfois”

🧾 En résumé

  • Java met en cache les objets Integer entre -128 et 127
  • dans cette plage, plusieurs variables peuvent référencer le même objet
  • en dehors de cette plage, de nouveaux objets sont créés
  • == compare les références → résultat parfois trompeur
  • .equals() compare les valeurs → méthode fiable

Le Integer Cache est une optimisation interne utile, mais qui peut facilement induire en erreur si on ne connaît pas son fonctionnement.


Voir aussi