在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 ())可以认为更正确.