code: public DiffBuilder append(final String fieldName, final Object lhs,
              final Object rhs) {
          validateFieldNameNotNull(fieldName);
          if (objectsTriviallyEqual) {
              return this;
          }
          if (lhs == rhs) {
              return this;
          }
  
          Object objectToTest;
          if (lhs != null) {
              objectToTest = lhs;
          } else {
              // rhs cannot be null, as lhs != rhs
              objectToTest = rhs;
          }
  
          if (objectToTest.getClass().isArray()) {
              if (objectToTest instanceof boolean[]) {
                  return append(fieldName, (boolean[]) lhs, (boolean[]) rhs);
              }
              if (objectToTest instanceof byte[]) {
                  return append(fieldName, (byte[]) lhs, (byte[]) rhs);
              }
              if (objectToTest instanceof char[]) {
                  return append(fieldName, (char[]) lhs, (char[]) rhs);
              }
              if (objectToTest instanceof double[]) {
                  return append(fieldName, (double[]) lhs, (double[]) rhs);
              }
              if (objectToTest instanceof float[]) {
                  return append(fieldName, (float[]) lhs, (float[]) rhs);
              }
              if (objectToTest instanceof int[]) {
                  return append(fieldName, (int[]) lhs, (int[]) rhs);
              }
              if (objectToTest instanceof long[]) {
                  return append(fieldName, (long[]) lhs, (long[]) rhs);
              }
              if (objectToTest instanceof short[]) {
                  return append(fieldName, (short[]) lhs, (short[]) rhs);
              }
  
              return append(fieldName, (Object[]) lhs, (Object[]) rhs);
          }
  
          // Not array type
          if (lhs != null && lhs.equals(rhs)) {
              return this;
          }
  
          diffs.add(new Diff<Object>(fieldName) {
              private static final long serialVersionUID = 1L;
  
              @Override
              public Object getLeft() {
                  return lhs;
              }
  
              @Override
              public Object getRight() {
                  return rhs;
              }
          });
  
          return this;
      }
docs: <p>
  Test if two {@code Objects}s are equal.
  </p>
  
  @param fieldName
  the field name
  @param lhs
  the left hand {@code Object}
  @param rhs
  the right hand {@code Object}
  @return this
  @throws IllegalArgumentException
  if field name is {@code null}