ksino's diary

覚えたことを忘れないように、小さなことでも書いていく。

java.util.DateのhashCodeを比較

java.util.Date#hashCodeメソッドはオーバーライドされており、「オブジェクトそのものの比較」には使えません。
http://docs.oracle.com/javase/jp/7/api/java/util/Date.html#hashCode()

こんな処理を実行すると

long current = System.currentTimeMillis();
Date date1 = new Date(current);
Date date2 = new Date(current);
System.out.println(date1.hashCode());
System.out.println(date2.hashCode());

こんな結果が返ってきます。

1904960945
1904960945

オブジェクトそのものの比較をやりたいときは、System#identityHashCodeメソッドを使えば良いです。
http://docs.oracle.com/javase/jp/7/api/java/lang/System.html#identityHashCode(java.lang.Object)

System.out.println(System.identityHashCode(date1));
System.out.println(System.identityHashCode(date2));

実行結果

366712642
1829164700