В каких случаях равенство ссылок на Java может отличаться от равенства equals () для объекта типа, который не переопределил equals ()? - PullRequest
1 голос
/ 20 мая 2009

Есть ли где-нибудь магия, которая может означать, что

(object0 == object1) != (object0.equals(object1))

где object0 и object1 имеют определенный тип, который не переопределяет Object.equals ()?

Ответы [ 9 ]

16 голосов
/ 20 мая 2009

Нет. Это в точности определение объекта. равно () .

... этот метод возвращает true, если и только если x и y ссылаются на один и тот же объект (x == y имеет значение true) ...

public boolean equals( Object o ) { 
   return this == o;
}
8 голосов
/ 20 мая 2009

Да, если под «Тип object0 не переопределяется Object.equals()», вы имеете в виду определенный тип, а не суперкласс.

Если object0 и object1 относятся к типу B, B расширяет A, а A переопределяет equals(Object obj), а B нет, то возможно, что B не переопределяет equals(Object obj), но (object0 == object1) != (object0.equals(object1)).

5 голосов
/ 20 мая 2009

Что ж, если object0 == null и object1 == null, первое выдаст true, а второе - NullPointerException ;-) Кроме этого, не должно быть заметной разницы.

3 голосов
/ 20 мая 2009

Хотя объекты не переопределяют функцию equals (), возможно, один из суперклассов объекта переопределяет метод equals () ...

Если вы используете eclipse: откройте файл object.java и дважды нажмите control-o. Введите «равно» и проверьте, видите ли вы только один метод «равно»: метод «равно» для Object

2 голосов
/ 20 мая 2009

Object.java src определяет свой метод equals как;

 return (this == obj)

так что нет: -)

1 голос
/ 20 мая 2009

Да, null == null верно, но null.equals(null) не определено.

0 голосов
/ 20 мая 2009

Вот исходный код для Object.equals:

public boolean equals(Object obj) {
  151           return (this == obj);
  152       }
  153   

Итак, №

0 голосов
/ 20 мая 2009

Нет. Фактический класс object0 (не обязательно объявленный тип переменной) должен иметь переопределенный метод equals (). Попробуйте распечатать object0.getClass ().

0 голосов
/ 20 мая 2009

Нет, если equals() не переопределено, возвращается значение true, если объекты являются одинаковыми объектами в памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...