Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java StringBuilder.append的性能_Java_String_Performance_Stringbuffer - Fatal编程技术网

Java StringBuilder.append的性能

Java StringBuilder.append的性能,java,string,performance,stringbuffer,Java,String,Performance,Stringbuffer,建议(PMD规则AppendCharacterWithChar)使用StringBuilder.append(char)而不是StringBuilder.append(String)。我同意这一点 但是如果我想附加一个(短)字符串,比如“=”或”: vs append(String)版本还做了一些工作,但这很简单: 一些空校验 检索长度 复制一系列字符 但这并不会带来太大的区别,至少对于非常短的字符串来说是如此 这里更重要的性能代价是StringBuffer方法是同步的:为了调用任一重载,必

建议(PMD规则AppendCharacterWithChar)使用
StringBuilder.append(char)
而不是
StringBuilder.append(String)
。我同意这一点

但是如果我想附加一个(短)字符串,比如
“=”
”:

vs

append(String)
版本还做了一些工作,但这很简单:

  • 一些空校验
  • 检索长度
  • 复制一系列字符
但这并不会带来太大的区别,至少对于非常短的字符串来说是如此

这里更重要的性能代价是
StringBuffer
方法是
同步的
:为了调用任一重载,必须在
StringBuffer
上获取一个监视器。这需要一些时间-我认为比额外完成的工作要长。并且调用
append(char)
表示您必须重复获取此监视器

这里真正的性能冲击是显示器和键盘之间的模糊部分-你。编写可读的代码:
append(String)
表单比反复调用
append(char)
表单更容易阅读


此外,如果可以,请使用
StringBuilder
——这样可以完全避免同步问题。

切换到
StringBuilder
,您将获得更大的性能提升。这不会产生任何明显的差异。切换到StringBuilder,并使用可读性最高的版本。
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;
}
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;
}