Почему объект по умолчанию.toString () возвращает шестнадцатеричное представление хэш-кода?
мне интересно, почему Object.toString()
возвращает это:
return getClass().getName() + "@" + Integer.toHexString(hashCode());
В отличие от этого:
return getClass().getName() + "@" + hashCode();
Какие преимущества дает отображение хэш-кода в виде шестнадцатеричного, а не десятичного кода?
2 ответов
Object.hashCode
используется для вычисления на основе местоположения памяти, где находится объект. Места памяти почти повсеместно отображаются как шестнадцатеричные.
возвращаемое значение по умолчанию toString
не столько интересуется хэш-кодом, сколько способом уникальной идентификации объекта с целью отладки, а хэш-код хорошо служит для идентификации (на самом деле комбинация имени класса + адрес памяти действительно уникальный; и хотя хэш-код не гарантированно уникален,он часто приближается).
Мне не нравится принятый ответ. Вот мой ответ.
короткий ответ: потому что hex легче запомнить, так как число, выраженное в hex, короче и имеет большее разнообразие символов, чем то же число, выраженное в decimal.
более длинный ответ: Вы не будете использовать хэш-код для выполнения арифметики с ним в голове, поэтому вам не нужно, чтобы он был десятичным. С другой стороны, вы, скорее всего, будете использовать его единственным способом предназначен для использования, то есть для определения, относятся ли два хэш-кода к одному и тому же объекту или к разным объектам. Другими словами, вы будете использовать его как уникальный идентификатор или мнемоника для объекта. Таким образом, тот факт, что это число, не имеет значения; вы можете также думать о нем как о хэш-строке. Ну, так уж получилось, что нашему мозгу намного легче сохранить (для сравнения) короткие строки, состоящие из 16 разных символов, чем более длинные строки состоит всего из 10 различных символов.