Object.toString()不会在Java中返回对象的哈希码值,而是提供一些字符串

时间:2018-09-18 06:26:51

标签: java

我写了以下代码:-

Test ob = new Test();
System.out.println(ob.toString());
System.out.println(ob.hashCode());

输出为

Test@15db9742
366712642

我知道第二个值是对象的哈希码,并且它是整数值,但是我无法理解第一个值是什么。如果它是对象的哈希码,那么它怎么可能是字符串而不是整数

3 个答案:

答案 0 :(得分:13)

如果您非常仔细地阅读toString的{​​{3}}:

  

Object类的toString方法返回一个字符串,该字符串包括该对象是其实例的类的名称,符号符“ @”和无符号的 十六进制 表示对象的哈希码。换句话说,此方法返回的字符串等于:

     

getClass().getName() + '@' + Integer.toHexString(hashCode())

366712642以十六进制表示的正是15DB9742!

  

如果它是对象的哈希码,那么它怎么可能是字符串而不是整数?

从文档中可以看到,它是类名,再加上@,再加上破折号,而不仅仅是哈希码。另外,该方法的名称为toString。如果返回int会很奇怪,不是吗?

答案 1 :(得分:5)

代表classname @ HashCode_in_Hexadeciaml_form。因此,您看到的字符串实际上是整数哈希码的十六进制形式

答案 2 :(得分:2)

您可以查看Object.java的源代码。 toString方法用于在运行时提供有关类的信息,因此可以重写。您正在做的是从Object.java调用默认的toString方法。它只是返回以下内容:

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

因此输出。

查看代码here