java.lang.Comparable和equals

如果我为类实现java.lang.Comparable ,我还是要重写equals()方法吗? 或者Comparableequals工作吗?

如果答案是否定的 ,那么如果出现一些差异怎么办? 假设我在equals()方法中将两个对象称为相等的方式与我在compareTo()中将两个相同类的对象称为相等的方式不同。

而且,如果我实现Comparable ,我还必须覆盖equals()吗?

虽然建议(并且非常明智)使a.compareTo(b) == 0暗示a.equals(b) (反之亦然),但不是必需的。 Comparable旨在用于对一系列对象执行排序时使用,而equals()仅测试直接相等。

这个链接有一些关于正确实现compareTo好信息。

来自java.lang.Comparable的 Javadoc:

强烈建议(尽管不是必需的)自然排序与equals一致。

虽然建议使用.equals().compareTo()不需要具有相同的行为。

只需查看BigDecimal API: http : //download.oracle.com/javase/1,5.0/docs/api/java/math/BigDecimal.html#equals(java.lang.Object)

假设我在equals()方法中将两个对象称为相等的方式与在可比较的toCompare()中将同一类的两个对象称为相等的方式不同?

如果你这样做,并将这些对象放入一个有序的集合中 ,那么该集合将会出错。 从SortedSet上的文档 :

请注意,如果有序集合要正确实现Set接口,则由有序集合维护的排序(无论是否提供显式比较器)必须与equals一致。

例如, TreeSet可能(错误地)包含两个对象

 a.compareTo(b) != 0 

即使

 a.equals(b) == true