相关疑难解决方法(0)

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

考虑一个带有"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 …
Run Code Online (Sandbox Code Playgroud)

java string

6
推荐指数
1
解决办法
692
查看次数

为什么stringbuffer最终?

字符串类是不可变的,其背后的原因之一是该类被声明为final,尽管还有其他原因.但是为什么StringBuffer或StringBuilder最终仍然是可变的?那么还有哪些因素决定String是不可变的?

java

3
推荐指数
1
解决办法
6142
查看次数

标签 统计

java ×2

string ×1