Почему по умолчанию Object.toString () включает хеш-код? - PullRequest
32 голосов
/ 17 января 2011

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

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

, вы, вероятно, увидите вывод как

someObjectClassname @ hashcodenumber

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

Ответы [ 3 ]

34 голосов
/ 17 января 2011

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

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

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

12 голосов
/ 16 июля 2016

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

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

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

5 голосов
/ 17 января 2011

Из Javadocs :

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...