为什么默认的Object.toString()包含哈希码?

时间:2011-01-17 10:31:26

标签: java

如果您执行:

System.out.println(someObj.toString());

您可能会看到输出

  

someObjectClassname @ hashcodenumber

我的问题:是否有任何具体原因显示为何显示hashCode编号?

3 个答案:

答案 0 :(得分:34)

对象哈希码是唯一的标准标识符,可能允许您在Java中区分不同的任意对象。它不一定是唯一的,但是相等的对象通常具有相同的哈希码。

默认的toString()方法显示对象类及其哈希码,以便您可以分别告诉不同的对象实例。由于默认情况下它也会在错误消息中使用,因此这很有意义。

有关详细信息,请参阅hashCode() method的说明。

答案 1 :(得分:12)

添加有用的内容。

有些新手可能会混淆为什么通过toString()返回的hascode值 与通过hashCode()返回的内容不同。 这是因为toString()方法返回相同哈希码的十六进制表示。

Integer.toHexString(object.hashCode());将返回object.toString()返回的相同值。

答案 2 :(得分:5)

来自javadocs

  

尽可能合理,   由类定义的hashCode方法   对象确实返回不同的整数   对于不同的对象。 (这是   通常通过转换实现   对象的内部地址   变成一个整数,但是这个   实施技术不是   JavaTM编程所要求的   语言。)

hashCode出现在对象的字符串表示形式中,以便您可以将此对象与同一类的其他对象区分开来。这对调试很有用。