[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:
obj1.getCreated().equals(obj2.getCreated())
renvoie true
Code:
obj2.getCreated().equals(obj1.getCreated())
renvoie false
Trouvant ceci surprenant j'ai regardé comment fonctionnait la méthode equals de date :
Code:
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:
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.