Performance of StringBuilder.append



建议使用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 - 这完全避免了同步问题。

最新更新