#java
#java
Вопрос:
У меня есть два объекта из базы данных (в базе данных это один и тот же объект), но у них разные хэши:
GroupType groupType = groupTypeDao.findById(3);
GroupType groupType1 = groupTypeDao.findById(3);
System.out.println(groupType);
System.out.println(groupType1);
Я получаю этот вывод:
GroupType@6040
GroupType@6041
Почему это так? Технологический стек: Spring, JavaFX, Hibernate.
У меня есть еще один проект с Spring и Hibernate. Файлы конфигурации идентичны в двух проектах. Версия гибернации также идентична. Но в другом проекте это приводит к одинаковым хэш-кодам.
Комментарии:
1. Это не те
HashCodes
…2. Сделайте:
groupType.hashCode()
иgroupType1.hashCode()
и посмотрите, что вы получите…3. Это
toString
значения, которые используются по умолчаниюhashCode()
… Что вы, вероятно, не реализовали.4. То, что вы видите, — это хэш-код идентификатора , оформленный в виде строки. Посмотрите
java.lang.Object#toString()
исходный код того, что вы получаете.5. Я пытаюсь программно выбрать строку в TableView. Я сохраняю объект в базе данных, загружаю фрейм с помощью TableView, получаю список всех объектов из базы данных и помещаю его в TableView следующим образом:
tableView.setItems(list);
Затем я пытаюсь выбрать этот объект и сфокусировать его.tableView.getSelectionModel().select(object)
. Но объект не найден в списке, потому что у него другой хэш-код. Строка не выделена, не выделена.
Ответ №1:
То, что вы напечатали, — это ссылки на объекты. Они действительно разные, если вы создали каждую ссылку, вызвав new .
Вам нужно переопределить equals , hashCode и toString в соответствии с «Эффективной Java», чтобы получить желаемое поведение.
Ответ №2:
System.out.println(groupType)
обычно вызывает toString()
метод на java.lang.Объект и это печатает:
getClass().getName() ‘@’ Integer.toHexString(хэш-код())
Теперь hashCode()
это может немного вводить в заблуждение, потому что, если оно не будет перезаписано…
метод hashCode, определенный class Object, возвращает разные целые числа для разных объектов.
Цитаты из java.lang.Документация объекта.