java Date equals 的坑


今天在JDK6上做開發,遇到一個很詭異的問題。

Domain中一個實體是Date,稱為變量 a,

使用Calendar構造出來的Date,稱為變量b,

雖然都是同一天,比如 2016-11-11 00:00:00,但是調用equals的結果卻是不一樣,為什么會出現這個情況?

System.out.println(a.equals(b)); // false
System.out.println(b.equals(a)); // true

Domain的變量來自Hibernate,雖然其類型描述為java.util.Date,但是其真實類型是Timestamp,其equals方法為

public boolean equals(java.lang.Object ts) {
      if (ts instanceof Timestamp) {
        return this.equals((Timestamp)ts);
      } else {
        return false; // 直接返回false
      }
    }

  而java.util.Date的equals方法為

public boolean equals(Object obj) {
        return obj instanceof Date && getTime() == ((Date) obj).getTime(); // 比較的是毫秒值,因此返回true
    }

  總結:所以這些看似同一個類的equals比較還需要看其真實類型的比較

  可以使用getTime()方法跳過這個坑,如果使用JDK8的LocalDateTime也是可以跳過這個坑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM