code: public static String getIdentityString(Object obj) {
  		if (obj == null) {
  			return "null";
  		}
  		return obj.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(obj));
  	}
docs: Returns the same {@link String} like {@link Object#toString()} would.
  <p>
  This {@link String} is less likely to have collisions as opposed to just using the
  {@link System#identityHashCode(Object)} of the class loader, because the {@link Class#getName()} is also included.
  <p>
  Note that the returned {@link String} is not guaranteed to be collision free. That means that for two different
  {@link Object}s of the same class, there could still be collisions. To minimize the risk of a collision, the
  output of this method should not be used if a lots of unique keys are needed.
  
  @param obj the {@link Object} (must not be null)
  @return a {@link String} which can be used as the cache key for the provided {@link ClassLoader}
  @throws IllegalArgumentException if obj is null