我写了以下代码:-
Test ob = new Test();
System.out.println(ob.toString());
System.out.println(ob.hashCode());
输出为
Test@15db9742
366712642
我知道第二个值是对象的哈希码,它是一个整数值,但我无法理解第一个值是什么。如果它是对象的哈希码,那么它怎么可能是字符串而不是整数
如果您非常仔细地阅读toString
的文档:
类 Object 的 toString 方法返回一个字符串,该字符串由对象作为其实例的类的名称、符号字符"@"和对象的哈希代码的无符号十六进制表示形式组成。换句话说,此方法返回一个字符串,其值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
十六进制366712642正好是 15DB9742!
如果它是对象的哈希码,那么它怎么可能是字符串而不是整数?
从文档中可以看出,它是类名,加上@
,加上破折号,而不仅仅是哈希代码。此外,该方法的名称为toString
。如果它返回一个int
会很奇怪,不是吗?
它表示classname@HashCode_in_Hexadeciaml_form。因此,您看到的字符串实际上是整数哈希码的十六进制形式
你可以查看Object.java
的源代码。toString
方法旨在在运行时提供有关类的信息,因此可以重写。您正在做的是从 Object.java 调用默认的toString
方法。它只返回以下内容:
getClass().getName() + "@" + Integer.toHexString(hashCode()
因此输出。
在此处查看代码