code: private boolean eq(final Object o1, final Object o2) {
  
  		if (o1 == null && o2 == null) {
  			return true;
  		}
  
  		if ((o1 == null && o2 != null) || (o1 != null && o2 == null)) {
  			return false;
  		}
  
  		try {
  
  			if (o1 instanceof Number && o2 instanceof Number) {
  
  				return compareNumberNumber(o1, o2) == 0;
  
  			} else if (o1 instanceof String && o2 instanceof String) {
  
  				return compareStringString(o1, o2) == 0;
  
  			} else if (o1 instanceof Date && o2 instanceof Date) {
  
  				return compareDateDate(o1, o2) == 0;
  
  			} else if (o1 instanceof Date && o2 instanceof String) {
  
  				return compareDateString(o1, o2) == 0;
  
  			} else if (o1 instanceof String && o2 instanceof Date) {
  
  				return compareStringDate(o1, o2) == 0;
  
  			} else if (o1 instanceof Boolean && o2 instanceof String) {
  
  				return compareBooleanString((Boolean)o1, (String)o2) == 0;
  
  			} else if (o1 instanceof String && o2 instanceof Boolean) {
  
  				return compareStringBoolean((String)o1, (Boolean)o2) == 0;
  
  			} else if (o1 instanceof Number && o2 instanceof String) {
  
  				return compareNumberString((Number)o1, (String)o2) == 0;
  
  			} else if (o1 instanceof String && o2 instanceof Number) {
  
  				return compareStringNumber((String)o1, (Number)o2) == 0;
  
  			} else {
  
  				return compareStringString(o1.toString(), o2.toString()) == 0;
  
  			}
  
  		} catch (NumberFormatException nfe) {
  
  			return false;
  
  		}
  	}
docs: ----- private methods -----