Object, equals / hashCode
Повтори методы класса Object и правила сравнения объектов. Разбери связь equals и hashCode, чтобы объяснять, как собственные классы должны вести себя при сравнении и использовании в хеш-коллекциях.
Вопросы
- Что такое класс Object?
- Какие методы есть у класса Object (перечислить все)? Что они делают?
- Расскажите про equals и hashcode
- Каким образом реализованы методы hashCode() и equals() в классе Object?
- Зачем нужен equals(). Чем он отличается от операции ==?
- Правила переопределения equals()
- Что будет, если переопределить equals() не переопределяя hashCode()? Какие могут возникнуть проблемы?
- Какой контракт между hashCode() и equals()?
- Для чего нужен метод hashCode()?
- Правила переопределения метода hashcode().
- Есть ли какие-либо рекомендации о том, какие поля следует использовать при подсчете hashCode()?
- Могут ли у разных объектов быть одинаковые hashCode()?
- Почему нельзя реализовать hashcode() который будет гарантированно уникальным для каждого объекта?
- Есть класс Point{int x, y;}. Почему хэш-код в виде 31 * x + y предпочтительнее чем x + y?
- Чем a.getClass().equals(A.class) отличается от a instanceof A