簡體   English   中英

StringBuilder.append的性能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM