Sobes.tech
Назад к вопросам
Senior
6

В чём разница между hashCode() и System.identityHashCode()?

Компании, где спрашивали
01.tech

Ответ от нейросети

sobes.tech AI

Метод hashCode() в Java — это метод объекта, который обычно переопределяется для обеспечения корректной работы в коллекциях, таких как HashMap или HashSet. Он возвращает хеш-код, основанный на логике объекта, например, на значениях его полей.

System.identityHashCode(Object obj) возвращает хеш-код, основанный на внутреннем адресе объекта в памяти, игнорируя переопределённый метод hashCode(). То есть, даже если класс переопределил hashCode(), вызов System.identityHashCode() даст уникальный идентификатор объекта, связанный с его реальным расположением.

Пример:

String a = new String("test");
String b = new String("test");

System.out.println(a.hashCode() == b.hashCode()); // true, т.к. содержимое одинаковое
System.out.println(System.identityHashCode(a) == System.identityHashCode(b)); // false, разные объекты

Таким образом, hashCode() используется для логического сравнения, а System.identityHashCode() — для идентификации конкретного объекта в памяти.