comparaison fausse de 2 entiers - Java - Programmation
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
Marsh Posté le 23-11-2009 à 10:09:43
discmat a écrit : Voila une erreur incompréhensible !!! |
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.
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())
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
++
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.
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