为什么默认的Object.toString()返回hashCode的hex表示?

我很好奇为什么Object.toString()返回这个:

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

与此相反:

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

将哈希码显示为hex而不是十进制有什么好处?

Object.hashCode用于根据对象所在的内存位置进行计算。 内存位置几乎普遍显示为hex。

toString的默认返回值对哈希代码不是那么感兴趣,而是为了调试目的而唯一地标识对象,并且哈希代码很好地用于识别目的(事实上,组合类名+内存地址确实是唯一的;虽然哈希码不能保证是唯一的,但它通常很接近)。

我不喜欢接受的答案。 这是我的答案。

简答:因为hex更容易记忆,因为以hex表示的数字更短,并且具有比以十进制表示的相同数字更大的字符种类。

更长的答案:你不会在你的头脑中使用哈希码来进行算术运算,所以你并不需要它是十进制的。 另一方面,您很可能会以打算使用它的唯一方式使用它,也就是说,判断两个哈希码是指同一个对象,还是指向不同的对象。 换句话说,您将使用它作为对象的唯一标识符或助记符 。 因此,它是一个数字的事实是无关紧要的; 你不妨把它想象成一个哈希字符串。 好吧,我们的大脑发现它更容易保留(为了比较的目的)由16个不同字符组成的短字符串,而不是仅由10个不同字符组成的较长字符串。