equals () vs compareTo () в компараторе / состоянии (теоретическое)

Я не понимаю 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, если критерии сортировки не актуальны в их случае. Я имею в виду, что выравнивание разных объектов - это не правильно, но разные объекты с нулевым сравнением, почему бы и нет?

EDIT: Later it says that consistency is strong recommended, for some compatibility issues, and hence the question

Ответы на вопрос(4)

Они просто говорят о естественном порядке. Вы можете быть после другого вида заказа

Документ Java говорит о естественном порядке. Вы можете сравнить их в противном случае. Но если речь идет о естественном порядке, то как вы думаете, это должно быть в обоих направлениях?

Даже после того, как 50 лун в день придут, мы увидим, что естественное упорядочение инвертеров перевернуто;)

Что Javadoc не говорит, что этоwrong иметь сравнение, которое не соответствует равным. Это просто определение терминологии для сравнения, согласующегося с равными.

When you get the choice как правило, приятно делать сравнение в соответствии с равными, так что при заданных A и B значение A либо меньше, равно или больше, чем B, но это не так.have работать таким образом.

Этоis важно, чтобы вы это задокументировали - вызывающие могут очень запутаться с порядком, который неожиданно не согласуется с равными.

В качестве примера рассмотримBigDecimal класс, в этом классе методыравняется а такжесравнить с не согласуются между собой:

Документация равных говорит:

public boolean equals(Object x)

Compares this BigDecimal with the specified Object for equality. Unlike compareTo, this method considers two BigDecimal objects equal only if they are equal in value and scale (thus 2.0 is not equal to 2.00 when compared by this method).

ВАШ ОТВЕТ НА ВОПРОС