首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java.util.Date的行为

Java.util.Date的行为
EN

Stack Overflow用户
提问于 2011-07-24 06:56:38
回答 3查看 1.2K关注 0票数 4
代码语言:javascript
复制
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());

上面的打印结果:

代码语言:javascript
复制
not equal
2011-07-23 22:24:21.834
1311459861834
Sat Jul 23 22:24:21
1311459861834

为什么会这样呢?这是一个过时的bug吗?这很难让人相信。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-24 07:10:41

a.getDate()显然返回java.sql.Timestamp

java.sql.Timestampjava.uti.Date具有不同的equals方法,后者基本上是

return obj instanceof Date && getTime() == ((Date) obj).getTime();

然而,Timestamp更复杂,它也要求目标是Timestamp

代码语言:javascript
复制
if (ts instanceof Timestamp) {
    return this.equals((Timestamp)ts);//the impl checks nanos too
  } else {
    return false;
  }

您可能会使用Hibernate或将java.util.Date持久化为Timestamp的类似工具。

票数 6
EN

Stack Overflow用户

发布于 2011-07-24 07:08:02

a.getDate()可能不会返回java.util.Date,但会返回扩展它的其他内容。

这可以解释奇怪的b.toString()b.equals(c)行为。

票数 4
EN

Stack Overflow用户

发布于 2011-07-24 07:10:01

这只有在a.getDate()返回Date的子类时才有可能,比如java.sql.Date

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6803823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档