Solución:
Ese es el nombre de la clase y System.identityHashCode () separados por el carácter ‘@’. Lo que representa el código hash de identidad es específico de la implementación. A menudo es la dirección de memoria inicial del objeto, pero la máquina virtual puede mover el objeto en la memoria con el tiempo. Entonces (brevemente) no puede confiar en que sea algo.
Obtener las direcciones de memoria de las variables no tiene sentido dentro de Java, ya que la JVM tiene la libertad de implementar objetos y moverlos como le parezca adecuado (sus objetos pueden / se moverán durante la recolección de basura, etc.)
Integer.toBinaryString () le dará un número entero en forma binaria.
Es posible usar sun.misc.Unsafe
: vea esta gran respuesta de @Peter Lawrey -> ¿Hay alguna manera de obtener una dirección de referencia?
Usando su código para printAddresses ():
public static void printAddresses(String label, Object... objects) {
System.out.print(label + ": 0x");
long last = 0;
int offset = unsafe.arrayBaseOffset(objects.getClass());
int scale = unsafe.arrayIndexScale(objects.getClass());
switch (scale) {
case 4:
long factor = is64bit ? 8 : 1;
final long i1 = (unsafe.getInt(objects, offset) & 0xFFFFFFFFL) * factor;
System.out.print(Long.toHexString(i1));
last = i1;
for (int i = 1; i < objects.length; i++) {
final long i2 = (unsafe.getInt(objects, offset + i * 4) & 0xFFFFFFFFL) * factor;
if (i2 > last)
System.out.print(", +" + Long.toHexString(i2 - last));
else
System.out.print(", -" + Long.toHexString( last - i2));
last = i2;
}
break;
case 8:
throw new AssertionError("Not supported");
}
System.out.println();
}
Configuré esta prueba:
//hashcode
System.out.println("Hashcode : "+myObject.hashCode());
System.out.println("Hashcode : "+System.identityHashCode(myObject));
System.out.println("Hashcode (HEX) : "+Integer.toHexString(myObject.hashCode()));
//toString
System.out.println("toString : "+String.valueOf(myObject));
printAddresses("Address", myObject);
Aquí está el resultado:
Hashcode : 125665513
Hashcode : 125665513
Hashcode (HEX) : 77d80e9
toString : [email protected]
Address: 0x7aae62270
Conclusión:
- hashcode! = dirección
- toString = [email protected](código hash)
Esa es la salida de la implementación “toString ()” de Object. Si su clase anula toString (), imprimirá algo completamente diferente.