3

我不明白 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 比较的不同对象为什么不呢?

编辑:后来它说强烈推荐一致性,对于一些兼容性问题,因此问题

4

4 回答 4

7

Javadoc 并不是说​​进行与等于不一致的比较是错误的。它只是定义与等于一致的比较的术语。

当您做出选择时,通常最好进行与 equals 一致的比较,例如给定 A 和 B,A 小于、等于或大于 B - 但它不必这种方式工作。

不过,记录这一点重要 - 调用者可能会对意外与 equals 不一致的排序感到非常困惑。

于 2012-05-31T12:32:27.970 回答
3

他们只是在谈论自然排序。您可能需要不同类型的订单

于 2012-05-31T12:32:43.200 回答
0

java doc 讨论了自然排序。您可以随意比较它们。但如果它是关于自然排序,那么你不认为它必须是双向的吗?

即使在每天 50 个月之后也不会到达我们可以看到整数的自然顺序被颠倒的地方;)

于 2012-05-31T12:33:14.983 回答
0

例如,考虑BigDecimal类,在此类中,方法equalscompareTo彼此不一致:

等于文档说:

公共布尔等于(对象 x)

将此 BigDecimal 与指定的 Object 进行比较是否相等。与compareTo不同,此方法仅当两个 BigDecimal 对象的值和比例相等时才认为它们相等(因此,通过此方法进行比较时,2.0 不等于 2.00)。

于 2012-05-31T12:36:37.623 回答