2015-04-04 2 views
-3

Я знаю, что оператор == применим для сравнения содержимого для примитивных типов и сравнения ссылок для объектов.Отношение между методами equals() и ==

Аналогичным образом, метод класса объектов предназначен для сравнения объектов и сравнения содержимого в строках и классах обертки.

Но следующие моменты, которые я взял из заметок SCJP/OCJP, я не могу понять. Я посмотрел в Интернете и нашел только различия между == и .equals, но не так, как это указано ниже.

  • Если r1==r2 истинно, тогда r1.equals(r2) всегда верно.
  • Если r1==r2 является ложным, то r1.equals(r2) может возвращать true (или) false.
  • Если r1.equals(r2) истинно, тогда r1==r2 может возвращать true (или) false.
  • Если r1.equals(r2) является ложным, то r1==r2 всегда неверно.
+4

Что вы хотите сказать? –

+1

Утверждение '' equals() 'метод класса объекта для ссылочного сравнения объектов и сравнения содержимого в строках и классах обертки" неверно. Существует много классов, где 'equals()' определяется как сравнение содержимого. Его цель состоит в том, чтобы объявить «значение», когда это имеет смысл (строки, числа, цвета, коллекции, координаты), и по умолчанию используется идентификатор объекта, где нет равенства «значение» в отношении автора. – RealSkeptic

+0

@RealSkeptic Утверждение «equals() метод класса объекта для сравнения ссылок объектов и сравнения содержимого в строках и классах-оболочках« CORRECT. Могут быть другие классы, где equals() определен, но относительно того, что OP упомянул правильно –

ответ

1

Эти требования гарантируют, что метод equals будет иметь семантику, что люди ожидают для концепции эквивалентности и логические/математические свойства.

Таким образом, мы ожидаем, что эквивалентность быть транзитивным: если А равно В и В равно С, то А равно С. И мы ожидаем, что симметрию: если А равно Б, то Б равно А. И мы ожидаем, что равенство be reflexive: A равно A.

 Смежные вопросы

  • Нет связанных вопросов^_^