Ответ
Метод hashCode() объявлен в корневом классе java.lang.Object.
Назначение: Возвращает целочисленное хэш-значение объекта, используемое в хэш-таблицах (например, HashMap, HashSet).
Реализация по умолчанию: Обычно возвращает число, соответствующее внутреннему адресу объекта в памяти, но эта деталь не гарантирована спецификацией JVM.
// Пример вызова унаследованного метода
Object obj = new Object();
System.out.println(obj.hashCode()); // Работает, т.к. метод из класса Object
Контракт между equals() и hashCode():
- Если два объекта равны по
equals(), ихhashCode()должны быть одинаковыми. - Если
hashCode()объектов совпадает, это не гарантирует равенство поequals()(возможна коллизия).
Правило: Всегда переопределяйте hashCode(), когда переопределяете equals(). Используйте для расчета те же поля, что и в equals().
import java.util.Objects;
public class Person {
private String name;
private int id;
@Override
public int hashCode() {
return Objects.hash(id, name); // Удобный метод из java.util.Objects
}
}