Вопрос-ответ

Why does the default Object.toString() include the hashcode?

Почему Object.toString() по умолчанию включает хэш-код?

Если вы выполните:

System.out.println(someObj.toString());

вы, вероятно, увидите вывод, подобный


someObjectClassname@hashcodenumber


Мой вопрос: Есть ли какая-то конкретная причина, по которой там отображается номер хэш-кода?

Переведено автоматически
Ответ 1

Хэш-код объекта - единственный стандартный идентификатор, который может позволить вам отличать разные произвольные объекты друг от друга в Java. Он не обязательно уникален, но равные объекты обычно имеют одинаковый хэш-код.

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

Смотрите Описание hashCode() метода для получения дополнительной информации.

Ответ 2

Добавляю кое-что полезное.

Некоторых новичков может смутить, почему значение hascode, возвращаемое через toString(), отличается от того, что возвращается через hashCode(). Это потому , что toString() метод возвращает шестнадцатеричное представление того же хэш - кода .

Integer.toHexString(object.hashCode()); вернет то же значение , что и object.toString().

Ответ 3

Из javadocs:


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


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

java