我很好奇为什么Object.toString()
会返回此信息:
return getClass().getName() + "@" + Integer.toHexString(hashCode());
与此相反:
return getClass().getName() + "@" + hashCode();
将哈希码显示为十六进制而不是十进制会有什么好处?
答案 0 :(得分:9)
Object.hashCode
based on a memory location where the object is located。内存位置几乎普遍显示为十六进制。
toString
的默认返回值对哈希代码不是那么感兴趣,而是为了调试目的而唯一地标识对象,并且哈希代码很好地用于识别(实际上,类名+内存地址的组合确实是唯一的;虽然哈希代码不能保证是唯一的,但它通常很接近)。
答案 1 :(得分:9)
我不喜欢接受的答案。这是我的答案。
简短回答:因为十六进制更容易记忆,因为以十六进制表示的数字更短,并且字符种类比以十进制表示的相同数字更大。
更长的答案:你不会使用哈希代码在头脑中进行算术运算,所以你真的不需要它是十进制的。另一方面,您很可能会以打算使用它的唯一方式使用它,也就是说,判断两个哈希码是指同一个对象,还是指不同的对象。换句话说,您将其用作对象的唯一标识符或助记符。因此,它是一个数字的事实是无关紧要的;你不妨把它想象成一个哈希字符串。好吧,我们的大脑发现它更容易保留(为了比较的目的)由16个不同字符组成的短字符串,而不是仅由10个不同字符组成的较长字符串。