建议(PMD规则AppendCharacterWithChar)使用StringBuilder.append(char)
而不是StringBuilder.append(String)
。我同意这一点。
但是,如果我想附加"='"
或"</"
之类的(短)字符串,则使用
StringBuilder.append('=').append('\'')
比
更好(更快)StringBuilder.append("='")
答案 0 :(得分:5)
The code for the two methods is:
public synchronized StringBuffer append(char c) {
toStringCache = null;
super.append(c);
return this;
}
public AbstractStringBuilder append(char c) {
ensureCapacityInternal(count + 1);
value[count++] = c;
return this;
}
VS
public synchronized StringBuffer append(String str) {
toStringCache = null;
super.append(str);
return this;
}
public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
一些更多的工作是由append(String)
版本完成的,但它是微不足道的:
但这并不会产生太大的影响,至少对非常短的字符串而言。
这里更显着的性能成本是StringBuffer
方法为synchronized
:为了调用任一过载,必须在StringBuffer
上获取监视器。这需要一些时间 - 我会想到比额外的工作更长的时间。并且调用append(char)
意味着您必须重复获取此监视器。
这里真正的性能是针对显示器和键盘之间的笨拙 - 你。编写可读的代码:append(String)
表单方式比一遍又一遍地调用append(char)
表单更容易阅读。
另外,如果可以,请使用StringBuilder
- 这样可以完全避免同步问题。