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

Mad*_*dhu 32 java

如果你执行:

System.out.println(someObj.toString());
Run Code Online (Sandbox Code Playgroud)

你可能看到输出像

someObjectClassname @ hashcodenumber

我的问题:有什么特定的原因可以显示hashCode编号吗?

thk*_*ala 34

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

默认toString()方法显示对象类及其哈希代码,以便您可以将不同的对象实例区分开来.由于默认情况下它也在错误消息中使用,因此这非常有意义.

有关更多信息,请参阅hashCode()方法的说明.


Sai*_*S.R 12

添加有用的东西.

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

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


dog*_*ane 5

来自javadocs:

尽可能合理,hashCodeObject类定义的方法确实为不同的对象返回不同的整数.(这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术.)

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