为什么默认的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很有用。