code: @Pure
  	@Override
  	@SuppressWarnings({"unchecked", "checkstyle:npathcomplexity"})
  	public int compareTo(Object obj) {
  		final Object oth = (obj instanceof Reference) ? ((Reference<?>) obj).get() : obj;
  		final T cur = get();
  
  		if (oth == null && cur == null) {
  			return 0;
  		}
  		if (cur == null) {
  			return 1;
  		}
  		if (oth == null) {
  			return -1;
  		}
  
  		if (cur instanceof Comparable) {
  			try {
  				return ((Comparable<Object>) cur).compareTo(oth);
  			} catch (AssertionError e) {
  				throw e;
  			} catch (Throwable exception) {
  				//
  			}
  		}
  
  		if (oth instanceof Comparable) {
  			try {
  				return -((Comparable<Object>) oth).compareTo(cur);
  			} catch (AssertionError e) {
  				throw e;
  			} catch (Throwable exception) {
  				//
  			}
  		}
  
  		return oth.hashCode() - cur.hashCode();
  	}
docs: Compare this reference to the specified object
  based on the {@link Object#hashCode()} if the
  references are not equals.
  
  @param obj {@inheritDoc}
  @return {@inheritDoc}