有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

调试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

这是为什么?这是约会中的错误吗?真不敢相信


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

    java.sql.Timestampjava.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持久化

  3. # 3 楼答案

    a.getDate()可能不会返回java.util.Date,但会有其他东西扩展它

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