使私有方法返回String而不是传递StringBuilder的优点和缺点是什么

Tod*_*d R 6 java string

考虑一个带有"buildMessage"方法的类(类似于):

public class MessageBuilder {
  public String buildMessage() {
    //Build up the message and return
    //
    //Get the header
    //Get the body
    //Get the footer
    //return
  }
}
Run Code Online (Sandbox Code Playgroud)

当我们建立我们的消息,这是优选构筑了一个StringBuilder(或类似的缓冲对象)的字符串,而不是仅仅concating一堆串在一起.但这是否意味着你失去了返回String的好处,而不是将StringBuilder作为参数?

换句话说,这很好读,很容易理解:

private String getHeader() {
  StringBuilder builder = new StringBuilder();
  builder.append("Hello ")
     .append(this.firstname)
     .append(",\n");
  return builder.toString();
}
Run Code Online (Sandbox Code Playgroud)

这对我来说比被迫传递给StringBuilder更自然,但我们也可以写:

private void appendHeader(StringBuilder builder) {
   builder.append("Hello ")
      .append(this.firstname)
      .append(",\n");
}
Run Code Online (Sandbox Code Playgroud)

第一个选项使得可以使用"get"方法,即使意图不是将返回的值附加到缓冲区.它还使公共方法易于理解:

public class MessageBuilder {
  public String buildMessage() {
    StringBuilder builder = new StringBuilder();
    builder.append(getHeader())
       .append(getBody())
       .append(getFooter());
    return builder.toString();
  }
}
Run Code Online (Sandbox Code Playgroud)

使用第二个选项时会导致:

public class MessageBuilder {
  public String buildMessage() {
    StringBuilder builder = new StringBuilder();
    appendHeader(builder);
    appendBody(builder);
    appendFooter(builder);
    return builder.toString();
  }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是第一个选项是否会遇到与"concating"+"strings"+"together"相同的内存问题.我有兴趣听取关于哪些内容读得更好的意见(因为如果有一个明确的赢家,哪个更清洁,更容易阅读,那将会对它有利于它的重要性),但我也对它的效率感到好奇.我怀疑几乎没有差别,但是想知道是否有人"知道"与每种方法相关的成本 - 如果是你,请分享!

Pet*_*rey 1

重用 StringBuilder 可以提高 CPU 效率。然而,我怀疑这真的很重要。

您应该采取您认为最自然、最清晰的方法。(从你所说的看来是 StringBuilder )

表现本身并不像许多人想象的那样成为做某事的充分理由。