Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1752 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  comparaison fausse de 2 entiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comparaison fausse de 2 entiers

n°1943339
discmat
Posté le 23-11-2009 à 09:51:01  profilanswer
 

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

mood
Publicité
Posté le 23-11-2009 à 09:51:01  profilanswer
 

n°1943343
discmat
Posté le 23-11-2009 à 10:03:41  profilanswer
 

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

n°1943345
brisssou
8-/
Posté le 23-11-2009 à 10:09:43  profilanswer
 

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
n°1943357
cbeyls
Hail to the King, Baby
Posté le 23-11-2009 à 10:29:31  profilanswer
 

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())

n°1943748
discmat
Posté le 23-11-2009 à 21:17:04  profilanswer
 

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
 
++

n°1943755
cbeyls
Hail to the King, Baby
Posté le 23-11-2009 à 21:53:03  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  comparaison fausse de 2 entiers

 

Sujets relatifs
Entiers de taille précise en C++Comparer deux nombres entiers
[PHP] Comparaison de chaine d'un fichierproblème de comparaison de deux fichiers
[VBS] Comparaison de dates (résolu)optimisation : strcmp() ou intval()+comparaison ?
Comparaison de texteComparaison de String et caractère universel
[JAVA] String identiques mais differents lors de la comparaison !comparaison de deux bases de données
Plus de sujets relatifs à : comparaison fausse de 2 entiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR