public String toString() {
  final StringBuilder sb = new StringBuilder("MyObject{");
  sb.append("att1='").append(att1).append(''');
  sb.append(", att2='").append(att2).append(''');
  sb.append(", att3='").append(att3).append(''');
  sb.append(super.toString());
  return sb.toString();
  }
  // Average performance with JMH (ops/s)
  // (min, avg, max) = (96073,645, 141463,438, 146205,910)
  // 使用JMH测出来的平均性能
  // (小, 平均, 大) = (96073,645, 141463,438, 146205,910)
  Guava
  Guava有一些helper类:其中一个可以帮助你生成toString。这比纯JDK API性能要差一点,但是它可以提供给你一些额外的服务(我这里指的Guava):
  public String toString() {
  return Objects.toStringHelper(this)
  .add("att1", att1)
  .add("att2", att2)
  .add("att3", att3)
  .add("super", super.toString()).toString();
  }
  // Average performance with JMH (ops/s)
  // (min, avg, max) = (97049,043, 110111,808, 114878,137)
  // 使用JMH测出来的平均性能
  // (小, 平均, 大) = (97049,043, 110111,808, 114878,137)
  Commons Lang3
  Commons Lang3有一些技术来生成toString:从builder到 introspector。如同你猜测到的,introspection更容易使用,代码量更少,但是性能比较糟糕:
  public String toString() {
  return new ToStringBuilder(this)
  .append("att1", att1)
  .append("att2", att2)
  .append("att3", att3)
  .append("super", super.toString()).toString();
  }
  // Average performance with JMH (ops/s)
  // (min, avg, max) = ( 73510,509,  75165,552,  76406,370)
  // 使用JMH测出来的平均性能
  // (小, 平均, 大) = ( 73510,509,  75165,552,  76406,370)
  public String toString() {
  return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
  }
  // Average performance with JMH (ops/s)
  // (min, avg, max) = (31803,224, 34930,630, 35581,488)
  // 使用JMH测出来的平均性能
  // (小, 平均, 大) =(31803,224, 34930,630, 35581,488)
  public String toString() {
  return ReflectionToStringBuilder.toString(this);
  }
  // Average performance with JMH (ops/s)
  // (min, avg, max) = (14172,485, 23204,479, 30754,901)
  // 使用JMH测出来的平均性能
  // (小, 平均, 大) = (14172,485, 23204,479, 30754,901)
  总结
  如今有了JVM优化,我们可以安全使用+来连接字符串(及使用Objects.toString来处理null)。有了内置到JDK的实用工具类,不需要外部框架来处理null值。因此,与本文中讲述的其它技术相比,开箱即用的JDK拥有更好的性能(如果你有其它的框架/技术,请留下评论我来试试看)。
  作为总结,下面是一个从JMH得到的平均性能数据表格(从高效依次递减)
  再说一次,如果你经常调用toString方法,这是很重要的。否则,性能真不是个事。