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

мне интересно, почему Object.toString() возвращает это:

return getClass().getName() + "@" + Integer.toHexString(hashCode());

В отличие от этого:

return getClass().getName() + "@" + hashCode();

Какие преимущества дает отображение хэш-кода в виде шестнадцатеричного, а не десятичного кода?

2 ответов


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

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


Мне не нравится принятый ответ. Вот мой ответ.

короткий ответ: потому что hex легче запомнить, так как число, выраженное в hex, короче и имеет большее разнообразие символов, чем то же число, выраженное в decimal.

более длинный ответ: Вы не будете использовать хэш-код для выполнения арифметики с ним в голове, поэтому вам не нужно, чтобы он был десятичным. С другой стороны, вы, скорее всего, будете использовать его единственным способом предназначен для использования, то есть для определения, относятся ли два хэш-кода к одному и тому же объекту или к разным объектам. Другими словами, вы будете использовать его как уникальный идентификатор или мнемоника для объекта. Таким образом, тот факт, что это число, не имеет значения; вы можете также думать о нем как о хэш-строке. Ну, так уж получилось, что нашему мозгу намного легче сохранить (для сравнения) короткие строки, состоящие из 16 разных символов, чем более длинные строки состоит всего из 10 различных символов.