Можно ли предположить, что два объекта с одинаковым System.identityHashCode одинаковы?

Хотя два разных объекта могут иметь одинаковый хеш-код, однако, System.identityHashCode() Кажется, вернуть указатель на память объекта. Я предполагаю, что не может быть никаких исключений в 32-битных реализациях JVM, включая Sun JDK, Open JDK. Я не проверял исходный код, хотя. На практике можно ли предположить два объекта с одинаковым System.identityHashCode() подобные?

3 ответа

Решение

Краткий ответ: нет.

Согласно документации, System.identityHashCode(Object)...

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

Итак, давайте проверим документацию Object.hashCode()...

Насколько это практически целесообразно, метод hashCode, определенный классом Object, возвращает разные целые числа для разных объектов. (Это обычно реализуется путем преобразования внутреннего адреса объекта в целое число, но этот метод реализации не требуется языком программирования Java.)

Ответ - нет.

System.identityHashCode () просто возвращает Object.hashCode().

Возвращает тот же хеш-код для данного объекта, который будет возвращен методом hashCode() по умолчанию, независимо от того, переопределяет ли класс данного объекта hashCode(). Хеш-код для нулевой ссылки равен нулю.

В то время как для Object.hashCode()

Насколько это практически целесообразно, метод hashCode, определенный классом Object, возвращает разные целые числа для разных объектов. (Это обычно реализуется путем преобразования внутреннего адреса объекта в целое число, но этот метод реализации не требуется языком программирования JavaTM.)

Однако в Sun JDK есть ошибка, указывающая, что два объекта могут возвращать один и тот же хэш-код.

В твоем вопросе только две вещи

Во-первых, что возвращает System.identityHashCode(Object).

Возвращает тот же хеш-код для данного объекта, который будет возвращен методом hashCode() по умолчанию, независимо от того, переопределяет ли класс данного объекта hashCode(). Хеш-код для нулевой ссылки равен нулю.

Во-вторых, что такое правило хеш-кода при сравнении равенства двух объектов.

Контракт говорит, что если два объекта равны с помощью метода equals(object), то они должны иметь одинаковый хеш-код, но если два объекта имеют одинаковый хеш-код, они не обязательно равны.

Другие вопросы по тегам