java.util.Date equals()和getTime()

时间:2015-02-08 08:17:51

标签: java

这两者之间有什么区别:

java.util.Date obj1;
java.util.Date obj2;

obj1.equals(obj2)
obj1.getTime() == (obj2.getTime())

它有毫秒差异吗?

6 个答案:

答案 0 :(得分:2)

查看Date#equals的实施:

947     public boolean equals(Object obj) {
948         return obj instanceof Date && getTime() == ((Date) obj).getTime();
949     }

使用getTime方法进行比较。

Date#getTime返回自1970年1月1日00:00:00 GMT"以来的"毫秒数,您不能使用equals,因为它是{{3}} {1}},请看其签名:

long

所以你应该简单地说:

public long getTime()

或使用obj1.equals(obj2) 运算符来比较==返回的值。

答案 1 :(得分:0)

第一个与Dates比较。第二个不编译,因为long(由getTime()返回)是一个基本类型,你不能在基本类型上调用method

答案 2 :(得分:0)

Date中定义的equals方法只检查getTime()是否为两个对象返回相同的内容。因此,使用equals和自己检查getTime()值之间确实不应该。如果这些图书馆都是明智的,那就不会。

但是,Datejava.sql.Timestamp)的至少一个子类会覆盖equals,并将其含义更改为与其基类不一致。因此,如果您的Date个对象恰好是Timestamp,那么其equals方法可能会产生不同的结果

答案 3 :(得分:0)

obj1.getTime().equals(obj2.getTime()) can't compile, as日期#getTime returns a primitive long`没有任何方法。

另一方面,如果您要说obj1.getTime() == obj2.getTime(),那么Date#equals方法使用的语句就不会有任何不同......

return obj instanceof Date && getTime() == ((Date) obj).getTime();

答案 4 :(得分:0)

第二个会导致编译错误。 :)

java.util.Date.getTime()返回原始long,而不返回对象类型Long。您无法调用基本类型的方法。 您正在寻找,Long.compare(obj1.getTime(),obj2.getTime())如果两者相等则返回0。或者,也可以使用Long.valueOf(obj1.getTime()).equals(Long.valueOf(obj2.getTime())。这两个都会在调用方法之前将long转换为Long

其次,在这种特殊情况下,两种方法都不会产生不同的结果。 '.equals()'用于检查两个对象是否有意义地彼此相等。与由java.util.Date个数字表示的long相反,某些类的相等性可能由多个属性的值定义。例如,在House类中,相等性将由街道地址,城市,邮政编码和国家/地区的总和来定义。在这种情况下,.equals()将是平等的唯一方法。

答案 5 :(得分:0)

Date date1 = new Date();
Date date2 = new Date();

案例1:date2.getTime == date1.getTime此特定比较,比较自1970年以来直到两个日期对象实例的毫秒数。数据类型将是原始long

案例2:date2.equals(date1)此特定比较执行以下操作,

public boolean equals(Object obj) { return obj instanceof Date && getTime() == ((Date) obj).getTime(); }

即case2还比较了自1970年以来经过的毫秒数,并额外检查了可比日期是否是Date对象的实例。