为什么默认的Object.toString()返回hashCode的十六进制表示?

时间:2010-09-17 14:34:40

标签: java hash tostring hashcode

我很好奇为什么Object.toString()会返回此信息:

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

与此相反:

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

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

2 个答案:

答案 0 :(得分:9)

曾经计算过{p> Object.hashCode based on a memory location where the object is located。内存位置几乎普遍显示为十六进制。

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

答案 1 :(得分:9)

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

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

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