Путь разработчика    

Как работает метод hashCode () Java?

eda2480d

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

Python
1 public native int hashCode();

Это указывает на то, что hashCode - это собственная реализация, которая в определенной степени обеспечивает адрес памяти. Однако можно переопределить метод hashCode в вашем классе реализации. Родные методы являются либо внутренними, либо написанными за пределами Java в «родном» коде, то есть конкретным для данного компьютера.

Java не создает значимого хэш-кода для вас, это ваша работа как разработчик для создания полезного хэш-кода. Однако Object генерирует HashCode на основе адреса памяти экземпляра объекта. Большинство классов (особенно Collection API) должны реализовывать собственный HashCode (а по контракту - собственный метод equals). Значение, возвращаемое hashCode(), никоим образом не гарантируется как адрес памяти объекта. Согласно Java API, вычисление hashcode основано на 32-битном внутреннем адресе JVM (Java Virtual Machine) объекта. Верно, что объект перемещается во время выполнения. Но hashcode не меняется.

Пример

Python
12345 Student student1 = new Student();person1.setName("John");Student student2 = new Student();person2.setName("Doe");Student student3 = student2;

В приведенном выше случае student1.hashCode не будет равен student2.hashCode, потому что адреса памяти этих двух объектов не совпадают. Но student2.hashCode будет равен student3, потому что они указывают на один и тот же объект. Поэтому, если вам нужно использовать метод hashCode для ваших объектов, вы должны реализовать его самостоятельно.

Метод HashCode и Equals в Java

В Java каждый объект имеет доступ к методу equals(), поскольку он наследуется от класса Object. Если два объекта равны в соответствии с методом equals (Object), то вызов метода hashCode для каждого из двух объектов должен давать одинаковый целочисленный результат. Вы должны переопределить hashCode() в каждом классе, который переопределяет equals(). Подробнее о .... Метод HashCode и Equals



Отзывы (через Facebook):

Оставить отзыв с помощью аккаунта FaceBook:

Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5. 3-е изд. (Робин Никсон)

Это популярное и доступное пособие поможет вам уверенно освоить динамическое веб-программирование с применением самых современных языков и технологий: PHP,...

23 11 2020 13:22:18

1С:Предприятие. Бухгалтерский учет. Секреты работы (Наталья Рязанцева)

Книга "1 С: Предприятие. Бухгалтерский учет. Секреты работы" посвящена системе программ ведения автоматизированного учета на предприятиях, в организациях и у...

22 11 2020 23:58:19

Метод indexOf() в Java

Метод Java String indexOf() возвращает позицию указанной строки или символа из данной строки. Если целевая строка или символ не существует, она вернет -1....

21 11 2020 16:50:13


Parse error: syntax error, unexpected ',' in /home/users/9/9165884745/domains/flash-mx.ru/lessons/926.php on line 69