考虑一个带有"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"相同的内存问题.我有兴趣听取关于哪些内容读得更好的意见(因为如果有一个明确的赢家,哪个更清洁,更容易阅读,那将会对它有利于它的重要性),但我也对它的效率感到好奇.我怀疑几乎没有差别,但是想知道是否有人"知道"与每种方法相关的成本 - 如果是你,请分享!
重用 StringBuilder 可以提高 CPU 效率。然而,我怀疑这真的很重要。
您应该采取您认为最自然、最清晰的方法。(从你所说的看来是 StringBuilder )
表现本身并不像许多人想象的那样成为做某事的充分理由。