Подтвердить что ты не робот

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

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

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

вы, вероятно, видите результат, например

someObjectClassname @hashcodenumber

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

4b9b3361

Ответ 1

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

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

Подробнее см. описание метода hashCode().

Ответ 2

Добавление чего-то полезного.

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

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

Ответ 3

Из javadocs:

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

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