哪一个更好地传递给StringBuilder.append?

v0l*_*0rt 5 java string

在StringBuilder附加的两个方法中,以下哪个代码更好?

stringBuilder.append('\n'); 
Run Code Online (Sandbox Code Playgroud)

要么

stringBuilder.append("\n");
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 12

即使仅包含单个字符,附加单个char(stringBuilder.append('\n'))也需要少于附加String(例如"\n")的工作String.

比较append(char c),它基本上对value数组执行单个赋值:

public AbstractStringBuilder append(char c) {
    ensureCapacityInternal(count + 1);
    value[count++] = c;
    return this;
}
Run Code Online (Sandbox Code Playgroud)

To append(String str),需要额外的2个方法调用(str.getChars()和System.arraycopy):

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;
}
Run Code Online (Sandbox Code Playgroud)

哪个叫

public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {
    if (srcBegin < 0) {
        throw new StringIndexOutOfBoundsException(srcBegin);
    }
    if (srcEnd > value.length) {
        throw new StringIndexOutOfBoundsException(srcEnd);
    }
    if (srcBegin > srcEnd) {
        throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);
    }
    System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin);
}
Run Code Online (Sandbox Code Playgroud)

因此,在性能方面,stringBuilder.append('\n')要优于stringBuilder.append("\n").

也就是说,在特定情况下\n,您可能想要使用第三个选项 - stringBuilder.append(System.lineSeperator ()).虽然这有附加a的缺点String(比附加a慢char),但它解释了这样一个事实,即不同的平台(例如Linux与Windows)使用不同的行分隔符,有时甚至包含多个字符.因此stringBuilder.append(System.lineSeperator ())可以认为更正确.