code: @GwtIncompatible("incompatible method")
      public EqualsBuilder append(final Object lhs, final Object rhs) {
          if (!isEquals) {
              return this;
          }
          if (lhs == rhs) {
              return this;
          }
          if (lhs == null || rhs == null) {
              this.setEquals(false);
              return this;
          }
          final Class<?> lhsClass = lhs.getClass();
          if (!lhsClass.isArray()) {
              // The simple case, not an array, just test the element
              if (testRecursive && !ClassUtils.isPrimitiveOrWrapper(lhsClass)) {
                  reflectionAppend(lhs, rhs);
              } else {
                  isEquals = lhs.equals(rhs);
              }
          } else {
              // factor out array case in order to keep method small enough
              // to be inlined
              appendArray(lhs, rhs);
          }
          return this;
      }
docs: <p>Test if two <code>Object</code>s are equal using either
  #{@link #reflectionAppend(Object, Object)}, if object are non
  primitives (or wrapper of primitives) or if field <code>testRecursive</code>
  is set to <code>false</code>. Otherwise, using their
  <code>equals</code> method.</p>
  
  @param lhs  the left hand object
  @param rhs  the right hand object
  @return EqualsBuilder - used to chain calls.