Object.toString() 在 java 中不返回对象的哈希码值,而是给出一些字符串



我写了以下代码:-

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()

因此输出。

在此处查看代码

最新更新