Sobes.tech
Junior — Middle
127

Mi történik a hashCode metódussal egy osztályban, ha nem örökli azt kifejezetten egy másik osztálytól?

Cégeket kérdeztek
Драйв Клик

Válasz az MI-től

sobes.tech MI

Если класс в Java не переопределяет метод hashCode(), то он наследует реализацию этого метода от ближайшего родительского класса, обычно от класса Object. В классе Object метод hashCode() возвращает целочисленное значение, которое обычно связано с адресом объекта в памяти (но это не гарантируется спецификацией).

Таким образом, если вы не переопределяете hashCode(), то для разных объектов будет возвращаться разное значение, даже если они логически равны. Это важно учитывать, особенно если вы переопределяете метод equals(), так как контракт между equals() и hashCode() требует, чтобы равные объекты имели одинаковые хэш-коды.

Пример:

class MyClass {
    // Нет переопределения hashCode()
}

MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();
System.out.println(obj1.hashCode()); // Например, 12345678
System.out.println(obj2.hashCode()); // Например, 87654321

Если нужно, чтобы объекты сравнивались по содержимому, необходимо переопределить и equals(), и hashCode().