我不明白Javadoc:
The natural ordering for a class C is said to be consistent with equals if and only if
(e1.compareTo((Object)e2) == 0) has the same boolean value as e1.equals((Object)e2) for
every e1 and e2 of class C.
为什么要那样?
我知道e1.equals(e2)= true应该始终意味着e1.compareTo(e2)== 0,但我无法理解为什么相反应该是真的。比较不平等! 2个相等的对象应该与零进行比较,但是如果排序标准与它们的情况无关,则2个不同的对象应该能够比较0。我的意思是,让不同的对象等于不正确,但不同的对象与0比较为什么不呢?
编辑:后来它表示强烈建议使用一致性问题,因此存在问题
答案 0 :(得分:7)
Javadoc没有说它是错误的进行与equals不一致的比较。它只是定义了与equals一致的比较术语。
当你得到选择时,通常很好的做出与equals一致的比较,这样给定A和B,A小于,等于或大于B - 但它没有' 以这种方式工作。
非常重要,你记录了这一点 - 调用者可能会对一个意外与equals不一致的排序感到非常困惑。
答案 1 :(得分:3)
他们只是谈论自然秩序。您可能会遇到其他类型的订单
答案 2 :(得分:0)
java doc谈论自然排序。你可以自由地比较它们。但如果它是关于自然排序那么你不想,它必须是两种方式?
即使每天50个月到达我们可以看到整数的自然顺序被逆转,也没有;)
答案 3 :(得分:0)
作为示例考虑BigDecimal类,在此类中,方法equals和compareTo彼此之间不一致:
等于文件说:
public boolean equals(Object x)
将此BigDecimal与指定的Object进行相等性比较。 与 compareTo 不同,此方法认为两个BigDecimal对象相等 只有它们的价值和规模相等(因此2.0不等于 2.00用这种方法比较时。)