Doublon possible :
Weird Java Boxing
Récemment, j'ai vu une présentation où il y avait l'exemple de code Java suivant :
Integer a = 1000, b = 1000;
System.out.println(a == b); // false
Integer c = 100, d = 100;
System.out.println(c == d); // true
Je suis maintenant un peu confus. Je comprends pourquoi dans le premier cas le résultat est "faux" - c'est parce que Integer est un type de référence et les références de "a" et "b" sont différentes.
Mais pourquoi dans le deuxième cas le résultat est "vrai"?
J'ai entendu une opinion selon laquelle la JVM met en cache les objets pour les valeurs int de -128 à 127 à des fins d'optimisation. De cette manière, les références de "c" et "d" sont les mêmes.
Est-ce que quelqu'un peut me donner plus d'informations sur ce comportement ? Je veux comprendre les objectifs de cette optimisation. Dans quels cas les performances sont améliorées, etc. Un renvoi à une recherche sur ce problème serait formidable.