¿Por qué el Object.toString () predeterminado incluye el hashcode?

Si ejecutas:

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

probablemente vea la salida como

someObjectClassname @ hashcodenumber

Mi pregunta: ¿Hay alguna razón específica por la cual el número de hashCode se muestre allí?

El código hash de objeto es el único identificador estándar que puede permitirle distinguir diferentes objetos arbitrarios en Java. No es necesariamente único, pero los objetos iguales normalmente tienen el mismo código hash.

El método predeterminado toString() muestra la clase de objeto y su código hash para poder distinguir entre diferentes instancias de objeto. Dado que también se utiliza por defecto en los mensajes de error, esto tiene bastante sentido.

Consulte la descripción del método hashCode() para obtener más información.

Agregar algo útil.

Algunos novatos pueden estar confundidos en cuanto a por qué el valor de hascode devuelto a toString() es diferente de lo que se devuelve a través de hashCode() . Esto se debe a que el método toString() devuelve una representación hexadecimal del mismo código hash.

Integer.toHexString(object.getHashcode); devolverá el mismo valor devuelto por object.toString() .

De los javadocs :

Tanto como sea razonablemente práctico, el método hashCode definido por el objeto de clase devuelve enteros distintos para objetos distintos. (Esto se implementa típicamente al convertir la dirección interna del objeto en un entero, pero esta técnica de implementación no es requerida por el lenguaje de progtwigción JavaTM).

El hashCode aparece en la representación de cadena del objeto para que pueda distinguir este objeto de otros objetos de la misma clase. Esto puede ser útil para la depuración.