comparaison fausse de 2 entiers

comparaison fausse de 2 entiers - Java - Programmation

Marsh Posté le 23-11-2009 à 09:51:01    

Voila une erreur incompréhensible !!!
J'ai 2 objets de même type sur lesquels je récupère et compare les identifiants.
if (obj1.getId() == obj2.getId())
   return true;
 
Voyant que la fonction ne renvoyait pas VRAI, je m'aperçoit que les 2 identifiants sont pourtant égaux. Après affichage détaillé, j'obtiens :  
23!=23    mais  comment cela se fait t il.... je re-détail l'affichage.... et je me rend compte que .....
23>23 !!!!
 
Le résultat de getId() est pourtant un "Integer".
Donc si vous avez des idées d'explication je suis preneur.  
Merci et bonne journée

Reply

Marsh Posté le 23-11-2009 à 09:51:01   

Reply

Marsh Posté le 23-11-2009 à 10:03:41    

Bon, finalement je compare la soustraction à 0 et la condition passe avec succès.
Pour récapituler :  
23>23 mais 23-23 = 0    
:)

Reply

Marsh Posté le 23-11-2009 à 10:09:43    

discmat a écrit :

Voila une erreur incompréhensible !!!
J'ai 2 objets de même type sur lesquels je récupère et compare les identifiants.
if (obj1.getId() == obj2.getId())
   return true;
 
Voyant que la fonction ne renvoyait pas VRAI, je m'aperçoit que les 2 identifiants sont pourtant égaux. Après affichage détaillé, j'obtiens :  
23!=23    mais  comment cela se fait t il.... je re-détail l'affichage.... et je me rend compte que .....
23>23 !!!!
 
Le résultat de getId() est pourtant un "Integer".
Donc si vous avez des idées d'explication je suis preneur.  
Merci et bonne journée


 
oui, du coup c'est un objet et pas un int.
 
Regarde la source de equals() pour les Integer, et reli la doc sur == pour les objets.


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 23-11-2009 à 10:29:31    

Comme dit Jean-Claude Van Damme, 1+1=11 et là c'est beau.
 
Quand tu travailles avec des références d'objets et non des valeurs, l'opérateur == signifie "est la même instance que". Donc si c'est l'équivalence que tu veux tester, tu devrais plutôt écrire quelque chose comme:
 
(obj1.getId() != null) && obj1.getId().equals(obj2.getId())

Reply

Marsh Posté le 23-11-2009 à 21:17:04    

ah ouai carrément,
Je suis allé trop vite en confondant le type Integer et le type int. C'est pour ça que ca marchait si je comparait sur le résultat de la soustraction. Je pensais que moi ou ma JVM devenait fou.
 
Merci encore
 
++

Reply

Marsh Posté le 23-11-2009 à 21:53:03    

Pour info, quand tu fais une soustraction je crois que Java fait de l'unboxing automatique, c'est à dire qu'il transforme ton type Integer en type primitif int automatiquement quand cela est nécessaire.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed