code: protected static String resolveObjectString(Object bean, Map<Object, String> alreadyAppearedSet) {
          if (bean == null) {
              return "null";
          }
          final String appeared = handleAlreadyAppeared(bean, alreadyAppearedSet);
          if (appeared != null) {
              return appeared;
          }
          final String exp;
          if (mightBeOverridden(bean)) {
              final String str = bean.toString();
              exp = str != null ? str : "null";
          } else { // virtual override
              exp = resolveBeanExpression(bean, alreadyAppearedSet);
          }
          alreadyAppearedSet.put(bean, exp); // real expression
          return exp;
      }
docs: =============