Il est possible d'utiliser sun.misc.Unsafe
: voir cette excellente réponse de @Peter Lawrey ->. Y a-t-il un moyen d'obtenir une adresse de référence ?
Utilisation de son code pour 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();
}
J'ai mis en place ce test :
//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);
Voici le résultat :
Hashcode : 125665513
Hashcode : 125665513
Hashcode (HEX) : 77d80e9
toString : java.lang.Object@77d80e9
Address: 0x7aae62270
Conclusion :
- hashcode != adresse
- toString = class@HEX(hashcode)
5 votes
Je ne vais pas voter contre parce que la question est suffisamment claire, je suggère juste que vous auriez dû la formuler en texte pour que les gens puissent la rechercher.
2 votes
En utilisant le programme sun.misc.Unsafe, il est possible d'obtenir l'adresse d'un objet java. Pour la liste des programmes, voir : javapapers.com/core-java/adresse-d'un-objet-java
0 votes
La valeur pointée est la représentation hexadécimale du code de hachage de l'objet a1 & a2