如果性能是主要考虑因素......具有讽刺意味的是(IMO)用于格式化进入缓冲区的文本的Java构造在CPU上比在alloc / realloc / garbage集合上耗费更多时间......好吧,可能不是GC取决于您创建和丢弃的构建器数量 .
但是简单地将一个复合字符串(“Hello World of”6E9“earthlings . ”)附加到缓冲区可能会使整个问题变得无关紧要 .
而且,实际上,如果StringBuilder涉及的内容是复杂而冗长的,而不是简单的 String str = "Hi"; (不管怎样,Java可能会在后台使用构建器) .
就个人而言,我尽量不滥用GC . 因此,如果它会在快速火灾场景中被大量使用 - 例如,编写调试输出消息......我只是假设在其他地方声明它并将其归零以便重复使用 .
class MyLogger {
StringBuilder strBldr = new StringBuilder(256);
public LogMsg( String stuff ) {
strBldr.setLength(0);
// ... prepend status level
strBldr.append("Info");
// ... prepend timestamp
strBldr.append(" " + getTimestamp());
// ... user msg
strBldr.append(":" + msg);
log.write(strBldr.toString());
}
}