public boolean looseEquals(Object keyObj) {
    boolean isEqual = false;

    if (key != null) {
      // Checks  a compound key (ObjectKey[] or String[]
      // based) with the delimited String created by the
      // toString() method.  Slightly expensive, but should be less
      // than parsing the String into its constituents.
      if (keyObj instanceof String) {
        isEqual = toString().equals(keyObj);
      }
      // check against a ObjectKey. Two keys are equal, if their
      // internal keys equivalent.
      else if (keyObj instanceof ComboKey) {
        SimpleKey[] obj = (SimpleKey[]) ((ComboKey) keyObj).getValue();

        SimpleKey[] keys1 = key;
        SimpleKey[] keys2 = obj;
        isEqual = keys1.length == keys2.length;
        for (int i = 0; i < keys1.length && isEqual; i++) {
          isEqual &= ObjectUtils.equals(keys1[i], keys2[i]);
        }
      } else if (keyObj instanceof SimpleKey[]) {
        SimpleKey[] keys1 = key;
        SimpleKey[] keys2 = (SimpleKey[]) keyObj;
        isEqual = keys1.length == keys2.length;
        for (int i = 0; i < keys1.length && isEqual; i++) {
          isEqual &= ObjectUtils.equals(keys1[i], keys2[i]);
        }
      }
    }
    return isEqual;
  }