[英]Performance of StringBuilder.append
建議(PMD規則AppendCharacterWithChar)使用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
- 這完全避免了同步問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.