在StringBuilder附加的两个方法中,以下哪个代码更好?
var html = '<table border="1">';
html += '<th id="keypress">KEY</th>';
html += '<th>VALUE</th>';
for (var key in mainObject) {
var innerObject = mainObject[key]
for (var innerKey in innerObject) {
html += '<tr>';
var t = innerObject[innerKey];
var ud = $(t).attr('class');
html += '<td>' + innerKey + '</td>';
html += '<td>' + $(t).html() + '</td>';
html += '</table>';
displayResources.html(html)
或
stringBuilder.append('\n');
答案 0 :(得分: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;
}
数组执行单个赋值:
append(String str)
至str.getChars()
,需要额外的2个方法调用(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;
}
):
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);
}
调用
stringBuilder.append('\n')
因此,就效果而言,stringBuilder.append("\n")
优于\n
。
也就是说,在stringBuilder.append(System.lineSeperator ())
的特定情况下,您可能想要使用第三个选项 - String
。虽然这有附加char
(比附加stringBuilder.append(System.lineSeperator ())
慢)的缺点,但它解释了不同平台(例如Linux与Windows)使用不同的行分隔符这一事实甚至包括多个角色。因此weakSelf
可以被认为更正确。