Почему по умолчанию Object.toString () возвращает шестнадцатеричное представление hashCode? - PullRequest
10 голосов
/ 17 сентября 2010

Мне любопытно, почему Object.toString() возвращает это:

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

, в отличие от этого:

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

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

Ответы [ 2 ]

9 голосов
/ 24 июля 2013

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

Краткий ответ: потому что шестнадцатеричный код легче запомнить, поскольку число, выраженное в шестнадцатеричном формате, короче и имеет больший набор символов, чем то же число, выраженное в десятичном виде.

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

9 голосов
/ 17 сентября 2010

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

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

...