这两者之间有什么区别:
java.util.Date obj1;
java.util.Date obj2;
obj1.equals(obj2)
obj1.getTime() == (obj2.getTime())
它有毫秒差异吗?
答案 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()
值之间确实不应该。如果这些图书馆都是明智的,那就不会。
但是,Date
(java.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
对象的实例。