Foo a;
...
Date b = a.getDate();
Date c = new Date(b.getTime());
if (b.equals(c)) System.out.println("equal");
else System.out.println("not equal");
System.out.println(b.toString());
System.out.println(b.getTime());
System.out.println(c.toString());
System.out.println(c.getTime());
The above prints:
not equal
2011-07-23 22:24:21.834
1311459861834
Sat Jul 23 22:24:21
1311459861834
Why is this? Is this a bug in Date? Thats hard to believe.
a.getDate()obviously returnsjava.sql.Timestampjava.sql.Timestamphas different equals method thanjava.uti.Datewhich is basicallyreturn obj instanceof Date && getTime() == ((Date) obj).getTime();Timestamphowever is more sophisticated and it requires the target to beTimestamptoo.You probably use Hibernate or something similar that persists
java.util.DateasTimestamp.