亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

詳細解讀AbstractStringBuilder類源碼

2024-07-13 10:13:24
字體:
來源:轉載
供稿:網友

因為看StringBuffer 和 StringBuilder 的源碼時發現兩者都繼承了AbstractStringBuilder,并且很多方法都是直接super的父類AbstractStringBuilder的方法,所以還是決定先看AbstractStringBuilder的源碼,然后再看StringBuffer 和 StringBuilder.

位置:java.lang包中

聲明: abstract class AbstractStringBuilderimplements Appendable, CharSequence

AbstractStringBuilder 類有abstract 修飾,可知它不能被實例化。

AbstractStringBuilder 類有兩個子類:StringBuilder和StringBuffer。

字段

 /**     * The value is used for character storage.     */    char value[];    /**     * The count is the number of characters used.     */    int count;

構造器

1、無參構造器

AbstractStringBuilder() {  }

2、創建abstractstringbuilder實現類的對象時指定緩沖區大小為capacity。

 AbstractStringBuilder(int capacity) {    value = new char[capacity];  }

當子類StringBuilder或StringBuffer實例化時,會在構造器中調用此構造器。

擴充容量

void expandCapacity(int minimumCapacity)

此方法有包訪問權限,類中有多個方法會調用此方法,在容量不足時擴充容量。

源碼:

 void expandCapacity(int minimumCapacity) {    int newCapacity = (value.length + 1) * 2;    if (newCapacity < 0) {      newCapacity = Integer.MAX_VALUE;    } else if (minimumCapacity > newCapacity) {      newCapacity = minimumCapacity;    }    value = Arrays.copyOf(value, newCapacity);  }

將緩沖區長度加1乘2的值賦予變量newCapacity, 然后將此值與指定的值比較,將較大值確定為緩沖區的新容量;然后調用Arrays類的copyof方法,此方法會創建一個新數組,然后將原數組中的字符全部復制進新數組中。

ensureCapacity(int minimumCapacity)

public void ensureCapacity(int minimumCapacity)

確保容量至少等于指定的最小值。如果當前容量小于指定值,則創建新數組,新數組的容量為指定值的兩倍加2;如果當前容量不小于指定值,則直接不做處理。

源碼:

 public void ensureCapacity(int minimumCapacity) {    if (minimumCapacity > value.length) {      expandCapacity(minimumCapacity);    }  }

測試:

    StringBuffer s = new StringBuffer();    System.out.println("容量:" + s.capacity());// 容量:16    s.ensureCapacity(10);    System.out.println("容量:" + s.capacity());// 容量:16    s.ensureCapacity(30);    System.out.println("容量:" + s.capacity());// 容量:34    s.ensureCapacity(80);    System.out.println("容量:" + s.capacity());// 容量:80

方法

codePointAt方法中都是用Character.codePointAtImpl(value, index, count)來實現的

public int codePointAt(int index) {    if ((index < 0) || (index >= count)) {      throw new StringIndexOutOfBoundsException(index);    }    return Character.codePointAtImpl(value, index, count);  }

getChars方法的實現用的是System.arraycopy()方法

public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)  {    if (srcBegin < 0)      throw new StringIndexOutOfBoundsException(srcBegin);    if ((srcEnd < 0) || (srcEnd > count))      throw new StringIndexOutOfBoundsException(srcEnd);    if (srcBegin > srcEnd)      throw new StringIndexOutOfBoundsException("srcBegin > srcEnd");    System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin);  }

append方法都牽扯到了ensureCapacityInternal()方法和getChars()方法來實現

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;  }

使用了Arrays.copyOf()來實現

void expandCapacity(int minimumCapacity) {    int newCapacity = value.length * 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);  }

Arrays.fill(value, count, newLength, ‘/0');字符串之間的復制

public void setLength(int newLength) {    if (newLength < 0)      throw new StringIndexOutOfBoundsException(newLength);    ensureCapacityInternal(newLength);    if (count < newLength) {      Arrays.fill(value, count, newLength, '/0');    }    count = newLength;  }

delete() 僅改變字符串的大小并未真正的刪除字符串

public AbstractStringBuilder delete(int start, int end) {    if (start < 0)      throw new StringIndexOutOfBoundsException(start);    if (end > count)      end = count;    if (start > end)      throw new StringIndexOutOfBoundsException();    int len = end - start;    if (len > 0) {      System.arraycopy(value, start+len, value, start, count-end);      count -= len;    }    return this;  }

學會靈活的運用System.arraycopy()方法

 public AbstractStringBuilder insert(int index, char[] str, int offset,                    int len)  {    if ((index < 0) || (index > length()))      throw new StringIndexOutOfBoundsException(index);    if ((offset < 0) || (len < 0) || (offset > str.length - len))      throw new StringIndexOutOfBoundsException(        "offset " + offset + ", len " + len + ", str.length "        + str.length);    ensureCapacityInternal(count + len);    System.arraycopy(value, index, value, index + len, count - index);    System.arraycopy(str, offset, value, index, len);    count += len;    return this;  }

總結

以上就是本文關于源碼詳細解讀AbstractStringBuilder類源碼詳細解讀的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91久久精品久久国产性色也91| 成人黄色大片在线免费观看| 成人激情在线观看| 92裸体在线视频网站| 国产www精品| 日韩精品视频免费在线观看| 日韩毛片在线看| 欧美人成在线视频| 国产www精品| 欧美国产日韩一区二区| 欧美二区在线播放| 国内精品久久久久久中文字幕| 奇米一区二区三区四区久久| 国产日韩亚洲欧美| 亚洲免费人成在线视频观看| 久久国产精品电影| 欧美激情极品视频| 日韩av中文字幕在线播放| 欧美午夜美女看片| 国产成人高潮免费观看精品| 亚洲男人av电影| 欧美激情2020午夜免费观看| 欧美精品在线免费播放| 国产精品无码专区在线观看| 亚洲网站在线看| 亚洲精品色婷婷福利天堂| 日韩中文字幕亚洲| 夜夜嗨av一区二区三区免费区| 91最新在线免费观看| 91嫩草在线视频| 2019中文在线观看| 久久夜精品香蕉| 日韩av黄色在线观看| 日本成人激情视频| 亚洲国产中文字幕在线观看| 国内精品免费午夜毛片| 国产97色在线| 日韩中文字幕在线看| 久久av资源网站| 福利视频一区二区| 欧美大片大片在线播放| 欧美最猛性xxxxx(亚洲精品)| 日本不卡高字幕在线2019| 国产精品午夜一区二区欲梦| 久久伊人91精品综合网站| 97视频在线观看免费高清完整版在线观看| 91视频免费网站| 午夜精品久久久久久99热软件| www.日韩视频| 亚洲午夜小视频| 久久国产精品久久久久久久久久| www.亚洲男人天堂| 在线观看国产欧美| 伊是香蕉大人久久| 亚洲最大福利视频| 亚洲国产精彩中文乱码av在线播放| 成人国产精品日本在线| 久久影院中文字幕| 狠狠色狠狠色综合日日小说| 欧洲永久精品大片ww免费漫画| 日本一区二三区好的精华液| 久久精品2019中文字幕| 美女性感视频久久久| 亚洲欧美另类国产| 88xx成人精品| 国产日韩欧美在线观看| 97在线观看免费| 久久久国产成人精品| 欧美性猛交xxxx黑人猛交| 美日韩丰满少妇在线观看| 亚洲精品电影久久久| 欧美日韩国产在线看| 欧美xxxx14xxxxx性爽| 一区二区在线视频播放| 456国产精品| 69影院欧美专区视频| 91精品中国老女人| 青青a在线精品免费观看| 51ⅴ精品国产91久久久久久| 欧美激情视频在线免费观看 欧美视频免费一| 欧美大尺度电影在线观看| 日韩女优人人人人射在线视频| 国产精品视频xxxx| 亚洲黄色av女优在线观看| 55夜色66夜色国产精品视频| 欧美久久久精品| 日韩在线视频免费观看| 国产91网红主播在线观看| 欧美丝袜一区二区三区| 国产成人久久久精品一区| 亚洲欧美精品伊人久久| 国产日本欧美视频| 亚洲伊人久久综合| 日本乱人伦a精品| 性欧美视频videos6一9| 欧美最顶级的aⅴ艳星| 亚洲色图狂野欧美| 久久国产精品免费视频| 午夜免费在线观看精品视频| 亚洲精品福利视频| 国产精品ⅴa在线观看h| 91精品久久久久久久久青青| 91免费视频网站| 成人黄色免费片| 欧美高清不卡在线| 午夜免费日韩视频| 亚洲高清不卡av| 成人乱色短篇合集| 97免费中文视频在线观看| 亚洲精品美女网站| 菠萝蜜影院一区二区免费| 一本色道久久88综合日韩精品| 亚洲性猛交xxxxwww| 亚洲综合中文字幕在线| 久久免费视频这里只有精品| 国产一区二区三区欧美| 中文字幕久久亚洲| 疯狂做受xxxx高潮欧美日本| 亚洲午夜未删减在线观看| 午夜精品一区二区三区在线播放| 欧美电影免费观看网站| 亚洲开心激情网| 成人激情黄色网| 国色天香2019中文字幕在线观看| 欧洲美女7788成人免费视频| 操日韩av在线电影| 日韩欧美视频一区二区三区| 日韩av片永久免费网站| 精品少妇v888av| 中文字幕免费精品一区| 在线亚洲男人天堂| 日韩在线观看高清| 亚洲激情成人网| 国产精品女人久久久久久| 亚洲free性xxxx护士hd| 亚洲天堂av在线播放| 日韩福利视频在线观看| 欧美日韩一二三四五区| 久久91亚洲精品中文字幕| 久久久中文字幕| 亚洲欧美中文日韩v在线观看| 亚洲国产精品资源| 亚洲免费电影在线观看| 欧美国产高跟鞋裸体秀xxxhd| 欧美野外猛男的大粗鳮| 日韩激情第一页| 91沈先生在线观看| 成人欧美一区二区三区黑人| 最近2019中文字幕大全第二页| 日韩欧美在线播放| 久久精品国产久精国产一老狼| 精品国产成人在线| 欧美寡妇偷汉性猛交| 精品久久久久久中文字幕一区奶水| 欧美成人久久久| 国产精品www色诱视频| 久久久国产精品一区| 国产精品69精品一区二区三区| 中文日韩在线观看| 国内精品久久久久影院 日本资源| 狠狠干狠狠久久| 日韩在线欧美在线国产在线| 欧美孕妇毛茸茸xxxx| 亚洲综合第一页|