Je viens de voir un code similaire à celui-ci :
public class Scratch
{
public static void main(String[] args)
{
Integer a = 1000, b = 1000;
System.out.println(a == b);
Integer c = 100, d = 100;
System.out.println(c == d);
}
}
Une fois exécuté, ce bloc de code s'imprimera :
false
true
Je comprends pourquoi la première est false
: parce que les deux objets sont des objets distincts, donc la ==
compare les références. Mais je n'arrive pas à comprendre pourquoi la deuxième instruction renvoie true
? Existe-t-il une étrange règle d'autocontrôle qui s'applique lorsque la valeur d'un nombre entier se situe dans une certaine plage ? Qu'est-ce qui se passe ici ?