Почему объект Object.toString() по умолчанию содержит хэш-код?
Если вы выполните:
System.out.println(someObj.toString());
вы, вероятно, видите результат, например
someObjectClassname @hashcodenumber
Мой вопрос: есть ли какая-либо конкретная причина, по которой там отображается номер hashCode?
Ответ 1
Хэш-код объекта является единственным стандартным идентификатором, который может указывать на разные произвольные объекты в Java. Это не обязательно уникальный, но равные объекты обычно имеют один и тот же хэш-код.
По умолчанию метод toString() показывает класс объекта и его хеш-код, чтобы вы могли, разумеется, разделить разные экземпляры объектов. Поскольку он также используется по умолчанию в сообщениях об ошибках, это имеет довольно большой смысл.
Некоторые новички могут быть смущены тем, почему значение hascode, возвращаемое через toString()
отличается от того, что возвращается через hashCode().
Это связано с тем, что метод toString() возвращает шестнадцатеричное представление того же хэш-кода.
Integer.toHexString(object.getHashcode); вернет то же значение, возвращаемое object.toString().
Насколько это разумно практично, метод hashCode, определенный классом Объект возвращает разные целые числа для отдельных объектов. (Это обычно реализуется путем преобразования внутренний адрес объекта в целое число, но это техника реализации не требуемый программным обеспечением JavaTM язык).
Хэш-код появляется в строчном представлении объекта, чтобы вы могли отличить этот объект от других объектов того же класса. Это может быть полезно для отладки.