code: private static void deeplyAppendParameter(StringBuffer sbuf, Object o,
                                              Map<Object[], Void> seenMap) {
      if (o == null) {
        sbuf.append("null");
        return;
      }
      if (!o.getClass().isArray()) {
        safeObjectAppend(sbuf, o);
      } else {
        // check for primitive array types because they
        // unfortunately cannot be cast to Object[]
        if (o instanceof boolean[]) {
          booleanArrayAppend(sbuf, (boolean[]) o);
        } else if (o instanceof byte[]) {
          byteArrayAppend(sbuf, (byte[]) o);
        } else if (o instanceof char[]) {
          charArrayAppend(sbuf, (char[]) o);
        } else if (o instanceof short[]) {
          shortArrayAppend(sbuf, (short[]) o);
        } else if (o instanceof int[]) {
          intArrayAppend(sbuf, (int[]) o);
        } else if (o instanceof long[]) {
          longArrayAppend(sbuf, (long[]) o);
        } else if (o instanceof float[]) {
          floatArrayAppend(sbuf, (float[]) o);
        } else if (o instanceof double[]) {
          doubleArrayAppend(sbuf, (double[]) o);
        } else {
          objectArrayAppend(sbuf, (Object[]) o, seenMap);
        }
      }
docs: special treatment of array values was suggested by 'lizongbo'