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

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

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

Я не понимаю вопроса, это определение "согласованности" междуcompareTo() а такжеequals()Он не говорит, если вы должны или не должны делать что-либо, просто дайте определение. amit
Хорошо, но это говорит позже, это рекомендуется, и я не понимаю, почему. Тем не менее, я не могу понять, почему неравные объекты по сравнению с нулем непоследовательны с философской точки зрения. Whimusical

Ваш Ответ

4   ответа
3

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

7

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

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

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

Но почему считается последовательным, что compareTo == 0 должно означать полностью равный? Я бы сказал, что они не находятся в разных приоритетах при сортировке Whimusical
Это & APOS; sodd (но не обязательно неправильно), чтобы два объекта оценивались как равные, но имели разные приоритеты сортировки. Это & APOS; sodd (но опять же, не обязательно неправильно) иметь разные сортируемые объекты и не иметь возможности определять приоритет сортировки.
0

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

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

0

В качестве примера рассмотрим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).

Правильно, идеальный пример. Но почему это должно считаться "противоречивым"? 2.0 не совсем 2.00, но они должны быть в нечеткой позиции сортировки при сравнении Whimusical

Похожие вопросы