Назад к вопросам
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() — для идентификации конкретного объекта в памяти.