public class MessageBuilder {
public String buildMessage() {
//Build up the message and return
//
//Get the header
//Get the body
//Get the footer
//return
}
}
当我们构建消息时,最好使用StringBuilder(或类似的缓冲对象)来构建字符串,而不是仅仅将一堆字符串连接在一起。但如果返回String而不是将您的StringBuilder作为参数传递,那么是否会失去这种优势呢?
换句话说,这样写很清晰易懂:
private String getHeader() {
StringBuilder builder = new StringBuilder();
builder.append("Hello ")
.append(this.firstname)
.append(",\n");
return builder.toString();
}
对我来说,这比强制使用StringBuilder更自然,但我们也可以这样写:
private void appendHeader(StringBuilder builder) {
builder.append("Hello ")
.append(this.firstname)
.append(",\n");
}
第一个选项可以让我们使用“get”方法,即使意图并非将返回值附加到缓冲区中。这也使得公共方法易于理解。
public class MessageBuilder {
public String buildMessage() {
StringBuilder builder = new StringBuilder();
builder.append(getHeader())
.append(getBody())
.append(getFooter());
return builder.toString();
}
}
使用第二个选项会导致:
public class MessageBuilder {
public String buildMessage() {
StringBuilder builder = new StringBuilder();
appendHeader(builder);
appendBody(builder);
appendFooter(builder);
return builder.toString();
}
}
我的问题是,第一种选项是否存在与“连接字符串”相同的内存问题。我对哪一种更易读感兴趣(因为如果有清晰的胜者以方便阅读,那么这将会是一个重要的考虑因素),但我也对效率很感兴趣。我怀疑它们几乎没有区别,但想知道每种方法所涉及的成本 - 如果您了解,请分享!