Impression unique de l'identité de l'objet à des fins de débogage en Java

Commençons avec le code.

Future<MyResult> obj = getFuture();
debugLog.println("Handling future: " + System.identityHashCode(obj);

et puis quelque chose d'autre-même, ou peut-être le même morceau de code exécuté à nouveau, éventuellement dans le thread différent.

Future<MyResult> obj = getFuture();
debugLog.println("Handling future: " + System.identityHashCode(obj);

Maintenant ci-dessus, si obj est le même objet, le débogage de tirages sera le même, évidemment. Mais si ils sont différents, il y a encore une chance de hash collision, de sorte que l'impression peut être même, même pour des objets différents. De sorte d'avoir le même résultat (ou, plus généralement, de la même chaîne) ne garantit pas le même objet.

Question: Est-il un moyen en Java pour obtenir l'id unique chaîne pour objet arbitraire? Ou plus formellement, donner static String Id.str(Object o) méthode afin que, de sorte que c'est toujours vrai:

final Object obj1 = ...;
final String firstId = Id.str(obj1);
//arbitrary time passes, garbage collections happen etc.
//firstId and obj1 are same variables as above
(firstId.equals(Id.str.obj2)) == (obj1 == obj2)

OriginalL'auteur hyde | 2013-01-24