L' <
, >
, <=
et >=
des opérateurs sont définies uniquement pour les types primitifs. Donc sur les types wrapper, le compilateur unbox les objets primitifs.
Cela signifie
System.out.println(a>=b);
est équivalent à
System.out.println(a.intValue()>=b.intValue());
Cependant, l' ==
et !=
opérateurs existent pour les types primitifs et les types référence, afin de les utiliser pour comparer deux objets de primitif types compare les références à la place des valeurs primitives qu'elles enveloppent.
Comme Holger commenté, la comparaison des références d'objet avec ==
et !=
existé dans la langue de Java avant de l'auto-boxing et de l'auto-unboxing ont été introduites, mais la comparaison avec d' <
, >
, <=
et >=
n'a pas été pris en charge pour tous les types de référence avant d'auto-unboxing a été introduit.
Cela signifie que, dans les premiers jours de Java, l' a>=b
de votre extrait de code ne serait pas passer la compilation (depuis a
et b
ne sont pas primitives types numériques). D'autre part, votre a==b
extrait serait encore passer à la compilation et de revenir false
.
Modification du comportement d' ==
et !=
pour les types de référence qui se trouvent être des wrappers de numérique primitives serait de modifier le comportement de code existant, brisant ainsi une compatibilité ascendante, ce qui est probablement la raison pour laquelle il n'a pas été fait.