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 :
renvoie true
Code : Sélectionner tout - Visualiser dans une fenêtre à part obj1.getCreated().equals(obj2.getCreated())
renvoie false
Code : Sélectionner tout - Visualiser dans une fenêtre à part obj2.getCreated().equals(obj1.getCreated())
Trouvant ceci surprenant j'ai regardé comment fonctionnait la méthode equals de date :
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 public boolean equals(Object obj) { return obj instanceof Date && getTime() == ((Date) obj).getTime(); }
Ok toString renvoie un resultat différent mais à priori les elements pris en compte dans la comparaison à savoir le temps en millisecondes sont egaux.
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
Y'a un truc qui m'echappe je crois.
Partager