为什么默认的Object.toString()包含哈希码?
如果您执行:
System.out.println(someObj.toString());
你可能会看到类似的输出
someObjectClassname @ hashcodenumber
我的问题:是否有任何特定的原因为什么hashCode号码显示在那里?
对象哈希代码是唯一的标准标识符,可能允许您在Java中区分不同的任意对象。 它不一定是唯一的,但是相同的对象通常具有相同的哈希码。
默认的toString()
方法显示对象类及其哈希代码,以便您可以分开告诉不同的对象实例。 由于默认情况下它也被用在错误信息中,所以这是相当有意义的。
有关更多信息,请参阅hashCode()
方法的描述。
添加有用的东西。
有些新手可能会混淆为什么通过toString()
返回的hascode值与通过hashCode()
返回的值不同。 这是因为toString()
方法返回相同哈希码的hex表示。
Integer.toHexString(object.getHashcode);
将返回object.toString()
返回的相同值。
从javadocs :
尽可能多地合理实用,由类Object定义的
hashCode
方法确实为不同的对象返回不同的整数。 (这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。)
hashCode出现在对象的string表示中,以便您可以将此对象与同一类的其他对象区分开来。 这对debugging很有用。