When I saw this I got baffled:
  public class Timestamp extends java.util.Date {
    //...
    public boolean equals(java.lang.Object ts) {
      if (ts instanceof Timestamp) {
        return this.equals((Timestamp)ts);
      } else {
        return false;
      }
    }
    public int hashCode() {
        return super.hashCode();
    }
It is indeed documented with a bold Note
(see https://docs.oracle.com/javase/7/docs/api/java/sql/Timestamp.html)
What could be the cause to make such a, to me, very bad decision? Why not call super.equals(this) when compared to a java.util.Date object to make the equal comparison symmetrical?
 
     
     
     
    