我写了以下代码:-
Test ob = new Test();
System.out.println(ob.toString());
System.out.println(ob.hashCode());
输出为
Test@15db9742
366712642
我知道第二个值是对象的哈希码,并且它是整数值,但是我无法理解第一个值是什么。如果它是对象的哈希码,那么它怎么可能是字符串而不是整数
答案 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