<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### StringBuilder&StringBuffer > 本文源碼基于JDK8 StringBuilder與StringBuffer是兩個常用的操作字符串的類。StringBuilder是線程不安全的,而StringBuffer是線程安全的;StringBuilder、StringBuffer都繼承自AbstractStringBuilder ``` abstract class AbstractStringBuilder implements Appendable, CharSequence { char[] value; //字符數組 int count; } ``` * Serializable:可以序列化的標志; * CharSequence接口:包含了charAt\(\)、length\(\) 、subSequence\(\)、toString\(\)這幾個方法,String類也實現了這個接口; ``` public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence{} ``` ``` public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence{} ``` ### append方法比較 AbstractStringBuilder抽象類的append方法 ``` public AbstractStringBuilder append(String str) { if (str == null) return appendNull(); int len = str.length(); ensureCapacityInternal(count + len);//確保不會溢出,必要時擴容 str.getChars(0, len, value, count);//將整個str拷貝到value的末尾 count += len; //增加計數 return this; } private void ensureCapacityInternal(int minimumCapacity) { // overflow-conscious code if (minimumCapacity - value.length > 0) //如果會溢出,則擴容 expandCapacity(minimumCapacity); } void expandCapacity(int minimumCapacity) { int newCapacity = value.length * 2 + 2; //新的容量是原容量的2倍+2 if (newCapacity - minimumCapacity < 0) newCapacity = minimumCapacity; if (newCapacity < 0) { if (minimumCapacity < 0) // overflow throw new OutOfMemoryError(); newCapacity = Integer.MAX_VALUE; } value = Arrays.copyOf(value, newCapacity); } ``` 注意:如果str是null,則會調用appendNull\(\)方法。這個方法其實是追加了'n'、'u'、'l'、'l'這幾個字符 ``` private AbstractStringBuilder appendNull() { int c = count; ensureCapacityInternal(c + 4); final char[] value = this.value; value[c++] = 'n'; value[c++] = 'u'; value[c++] = 'l'; value[c++] = 'l'; count = c; return this; } ``` StringBuffer ``` @Override public synchronized StringBuffer append(String str) { toStringCache = null; super.append(str); return this; } ``` toStringCache這個變量是用于最近一次toString\(\)方法的緩存,任何時候只要StringBuffer被修改了這個變量會被賦值為null; ``` @Override public synchronized String toString() { if (toStringCache == null) { toStringCache = Arrays.copyOfRange(value, 0, count); } return new String(toStringCache, true); } ``` StringBuilder ``` @Override public StringBuilder append(String str) { super.append(str); return this; } ``` ## 總結 * StringBuilder和StringBuffer都是可變字符串,前者線程不安全,后者線程安全。 * StringBuilder和StringBuffer的大部分方法均調用父類AbstractStringBuilder的實現。其擴容機制首先是把容量變為原來容量的2倍加2。最大容量是Integer.MAX\_VALUE,也就是0x7fffffff。 * StringBuilder和StringBuffer的默認容量都是16,最好預先估計好字符串的大小避免擴容帶來的時間消耗 ``` public StringBuilder() { super(16); } public StringBuffer() { super(16); } ``` * StringBuilder是jdk1.5引進的,而StringBuffer在1.0就有了;
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看