Aperiquiz #4 : Integer equals Integer
Posté à 22:04 le 21/07/2009, par Vivien Barousse dans Java
Soit le code suivant :
Quel est la valeur de
c ?
true
false
- Erreur de compilation
- Une exception est levée lors de l'exécution
Réponse : (
cliquez pour afficher)
En utilisant Java 5 : false.
En utilisant Java 1.4 : Erreur de compilation.
Explication :
Le cas de Java 1.4 est certainement le plus simple à expliquer : nous avons deux objets de type Integer, et il est impossible de comparer des objets avec les opérateurs < et >. En Java 1.4, l'autoboxing n'existe pas.
Concernant Java 5, l'explication est plus profonde. Nos objets de type Integer sont automatiquement transformés en int dès que nécessaire. C'est le cas lors des comparaisons en utilisant les opérateurs < et >. Ces deux comparaisons renvoient donc false. Cependant, lors de la comparaison avec l'opérateur ==, nos objets ne sont pas convertis en int, mais leur références sont comparées. a et b étant deux objets distincts, la comparaison avec == renvoie false. D'où la valeur de c.
Permalink |
Plus amusant encore:
Integer i = 42, j = 42;
Integer k = 1337, l = 1377;
System.out.println(i==j + " "+ k ==l);
:)
Posted by Makkhdyn on juillet 21, 2009 at 10:26 PM CEST #
T'es un grand malade toi ;-)
Posted by Stéphane V. on juillet 21, 2009 at 10:55 PM CEST #
Du coup pour des Integer il faut utiliser equals pour comparer les valeurs ?
Posted by newBee on juin 12, 2010 at 10:09 AM CEST #
petite explication sur le :
Integer i = 42, j = 42;
Integer k = 1337, l = 1377;
System.out.println(i==j + " "+ k ==l);
?
Posted by newBee on juin 12, 2010 at 10:19 AM CEST #
Pour comparer des Integer, utiliser equals permet d'éviter quelques "surprises"
Posted by viv on juin 15, 2010 at 12:53 PM CEST #