4
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

どうしてこれなの?これは Date のバグですか? それは信じがたいです。

4

3 に答える 3

6

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.

于 2011-07-23T23:10:40.760 に答える
4

a.getDate()戻らないかもしれませんjava.util.Dateが、それを拡張する何か他のものです。

これは奇妙b.toString()b.equals(c)振る舞いを説明するでしょう。

于 2011-07-23T23:08:01.617 に答える
2

これは、 などa.getDate()の のサブクラスを返す場合にのみ可能です。Datejava.sql.Date

于 2011-07-23T23:10:00.627 に答える