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

时间:2018-04-25 09:30:01

标签: java string

在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'); 

1 个答案:

答案 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.arraycopypublic 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可以被认为更正确。