调试java。util。Date的行为
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
这是为什么?这是约会中的错误吗?真不敢相信
# 1 楼答案
只有当
a.getDate()
返回Date
的子类,例如java.sql.Date
时,这才是可能的# 2 楼答案
a.getDate()
显然返回java.sql.Timestamp
java.sql.Timestamp
与java.uti.Date
的equals方法不同,后者基本上是return obj instanceof Date && getTime() == ((Date) obj).getTime();
但是
Timestamp
更复杂,它要求目标也是Timestamp
您可能会使用Hibernate或类似的工具,将
java.util.Date
作为Timestamp
持久化# 3 楼答案
a.getDate()
可能不会返回java.util.Date
,但会有其他东西扩展它这可以解释奇怪的
b.toString()
和b.equals(c)
行为