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 #