Я читал JavaDoc для Object.hashCode
метод, он говорит, что
Насколько это разумно практично, метод hashCode, определенный классом Object, действительно возвращает отдельные целые числа для отдельных объектов. (Обычно это реализуется путем преобразования внутреннего адреса объекта в целое число [...])
Но какой бы ни была его реализация, метод hashCode
всегда возвращает (допустим, положительное) целое число, поэтому при Integer.MAX+1
разных объектах два из них будут иметь одинаковый хэш-код.
Почему здесь JavaDoc «отрицает» коллизии? Это практический вывод, учитывая, что используется внутренний адрес и «да ладно, у вас никогда не будет Integer.MAX+1
объектов в памяти сразу, поэтому мы можем сказать, что он практически всегда уникален»?
РЕДАКТИРОВАТЬ
Эта запись об ошибке (спасибо, Sleiman Jneidi) дает точное представление о том, что я имею в виду (похоже, это обсуждение прошло более 10 лет):
Похоже, что многие, возможно, большинство программистов считают, что это означает, что реализация по умолчанию и, следовательно, System.identityHashCode будет создавать уникальные хэш-коды.
Квалификации «настолько, насколько это разумно практично» на практике недостаточно, чтобы прояснить, что на практике хэш-коды не являются отдельными.