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().
Насколько это разумно практично, hashCode метод, определенный class Object , возвращает разные целые числа для разных объектов. (Обычно это реализуется путем преобразования внутреннего адреса объекта в целое число, но этот метод реализации не требуется языком программирования JavaTM.)
Хэш-код отображается в строковом представлении объекта, чтобы вы могли отличить этот объект от других объектов того же класса. Это может быть полезно для отладки.