代码之家  ›  专栏  ›  技术社区  ›  Tom Tresansky

为什么默认的object.toString()返回哈希代码的十六进制表示形式?

  •  10
  • Tom Tresansky  · 技术社区  · 14 年前

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

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

    与此相反:

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

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

    2 回复  |  直到 8 年前
        1
  •  9
  •   Community CDub    7 年前

    Object.hashCode 用于计算 based on a memory location where the object is located . 内存位置几乎全部显示为十六进制。

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

        2
  •  9
  •   Mike Nakis    11 年前

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

    简短回答:因为十六进制比较容易记忆,因为用十六进制表示的数字比用十进制表示的相同数字短,而且字符变化较大。

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