IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

[Date] a.equals(b) != b.equals(a) !?


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de rushtakn
    Inscrit en
    Mai 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 213
    Par défaut [Date] a.equals(b) != b.equals(a) !?
    Yo !

    Petit message pour un probleme surprenant que j'ai rencontré ce matin.
    Comme annoncé dans le titre, j'ai 2 objets Date qui sont à priori identiques, mais dont la comparaison ne donne pas le meme resultat selon que je compare a à b ou b à a.

    Plus simplement, dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    obj1.getCreated().equals(obj2.getCreated())
    renvoie true
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    obj2.getCreated().equals(obj1.getCreated())
    renvoie false

    Trouvant ceci surprenant j'ai regardé comment fonctionnait la méthode equals de date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public boolean equals(Object obj) {
            return obj instanceof Date && getTime() == ((Date) obj).getTime();
        }
    Puis j'ai fait des tests qui ont donné les resultats suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    obj1.getCreated() : Fri May 29 11:40:45 CEST 2009
    obj2.getCreated() : 2009-05-29 11:40:45.929
    obj1.getCreated().getTime() : 1243590045929
    obj2.getCreated().getTime() : 1243590045929
    obj1.getCreated().equals(obj2.getCreated()) : true
    obj2.getCreated().equals(obj1.getCreated()) : false
    obj1.getCreated() instanceof Date && obj2.getCreated().getTime() == obj1.getCreated().getTime() : true
    obj2.getCreated() instanceof Date && obj1.getCreated().getTime() == obj2.getCreated().getTime() : true
    Ok toString renvoie un resultat différent mais à priori les elements pris en compte dans la comparaison à savoir le temps en millisecondes sont egaux.

    Y'a un truc qui m'echappe je crois.

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 380
    Par défaut
    Bonjour,

    J'ai l'impression que la date:

    n'est pas une Date, mais plutôt un Timestamp?

    Si oui: Timestamp hérite de Date oui, mais il a une méthode equals diférrente.
    La méthode equals ne sait pas comparer avec un objet d'un niveau supérieur.

  3. #3
    Membre éprouvé Avatar de rushtakn
    Inscrit en
    Mai 2006
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 213
    Par défaut
    arg oui, apres verification c'est effectivement un Timestamp.
    En fait je recupere cette date depuis une bdd mappée avec hibernate, et j'ai spécifié en tant que type hibernate un timestamp pensant que la conversion se ferait vers un objet Date, à vrai dire j'ignorais totalement l'existence de la classe Timestamp
    Tanpis je ferai le test d'egalité à partir de la classe de niveau supérieur.

    Merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. equals et not equals
    Par Invité dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 16/02/2013, 14h57
  2. [debutant][struts]: utilisation du tag <logic:equal ...&g
    Par sleepy2002 dans le forum Struts 1
    Réponses: 13
    Dernier message: 23/11/2006, 17h04
  3. Probleme d'equals to
    Par Ditch dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 25/10/2004, 17h19
  4. [STRUTS] Tag Equal, comparer deux variables
    Par logica dans le forum Struts 1
    Réponses: 2
    Dernier message: 04/06/2004, 12h01
  5. [ Struts ] plusieurs conditions avec equal?
    Par njac dans le forum Struts 1
    Réponses: 7
    Dernier message: 04/06/2004, 09h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo