将一个 StringBuilder 附加到另一个 StringBuilder

Appending a StringBuilder to another StringBuilder

我写了一些代码,其中有很多字符串创建。为了尽量避免一遍又一遍地创建昂贵的字符串,我使用了 java StringBuilder class。

我的代码有点像这样:

public String createString(){
  StringBuilder stringBuilder = new StringBuilder();
  for(int i = 0; i < Integer.MAX_VALUE ; i++){ //its not actually this, but it's a large loop. 
      stringBuilder.append(appendString())
  }
  return stringBuilder.toString();
}

appendString 方法还实例化一个 StringBuilder 并附加到它。

为了节省时间,我注意到我可以使我的 appendString 方法 return 成为 StringBuilder,而不是 String,这样可以避免 returning stringBuilder 使用 .toString() 方法,如下所示:

public StringBuilder appendString(){
  StringBuilder appendBuilder = new StringBuilder();
  appendBuilder.append("whatever");
  return appendBuilder;
}

这一切都很好,直到我查看 StringBuilder 文档并意识到 StringBuilder class 上没有 append(StringBuilder stringBuilder) 方法,只有 [=22] =].

所以我的问题是,这段代码如何 运行?无论如何它都会将 StringBuilder 转换为 String 吗?

StringBuilder 有一个 public StringBuilder append(CharSequence s) 方法。 StringBuilder 实现了 CharSequence 接口,因此您可以将 StringBuilder 传递给该方法。

有很多 append() 重载,包括 append(CharSequence cs)。字符串在它们自己的方法中处理,其他 CharSequences 没有自己的重载由更通用的方法处理。

有趣的是一个append(StringBuffer sb)