建议使用StringBuilder.append(char)
而不是StringBuilder.append(String)
。我同意。
但是,如果我想附加一个(短)字符串,例如"='"
或"</"
,则使用
StringBuilder.append('=').append(''')
比
更好(更快)StringBuilder.append("='")
?
这两种方法的代码是:
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
- 这完全避免了同步问题。