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());上面的打印结果:
not equal
2011-07-23 22:24:21.834
1311459861834
Sat Jul 23 22:24:21
1311459861834为什么会这样呢?这是一个过时的bug吗?这很难让人相信。
发布于 2011-07-24 07:10:41
a.getDate()显然返回java.sql.Timestamp
java.sql.Timestamp与java.uti.Date具有不同的equals方法,后者基本上是
return obj instanceof Date && getTime() == ((Date) obj).getTime();
然而,Timestamp更复杂,它也要求目标是Timestamp。
if (ts instanceof Timestamp) {
return this.equals((Timestamp)ts);//the impl checks nanos too
} else {
return false;
}您可能会使用Hibernate或将java.util.Date持久化为Timestamp的类似工具。
发布于 2011-07-24 07:08:02
a.getDate()可能不会返回java.util.Date,但会返回扩展它的其他内容。
这可以解释奇怪的b.toString()和b.equals(c)行为。
发布于 2011-07-24 07:10:01
这只有在a.getDate()返回Date的子类时才有可能,比如java.sql.Date。
https://stackoverflow.com/questions/6803823
复制相似问题