码迷,mamicode.com
首页 > 其他好文 > 详细

字符串连接操作下的String和StringBuilder(二)

时间:2014-07-30 11:49:13      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   java   使用   strong   io   数据   

重点关注StringBuilder的append方法

 

使用source insight查看Jdk中提供的源码 定位到StringBuilder.java

搜索append方法 定位到append方法的一种重载

    public StringBuilder append(String str) {
    super.append(str);
        return this;
    }

可见是调用父类的append方法

 

定位到父类的append(String str)方法

    public AbstractStringBuilder append(String str) {
    if (str == null) str = "null";
        int len = str.length();
    if (len == 0) return this;
    int newCount = count + len;
    if (newCount > value.length)
        expandCapacity(newCount);
    str.getChars(0, len, value, count);
    count = newCount;
    return this;
    }

str为空和Len为0的情况不作叙述。

 

value的定义(char类型数组)

   /**
     * The value is used for character storage.
     */
    char value[];

count的定义(数组中已使用的)

    /** 
     * The count is the number of characters used.
     */
    int count;

 

int newCount = count + len;
    if (newCount > value.length)
        expandCapacity(newCount);

 

newCount得到新的长度 和默认的字符数组长度作对比 

如果append一个字符串之后长度超过默认value数组的长度就对其做扩容操作

    /**
     * This implements the expansion semantics of ensureCapacity with no
     * size check or synchronization.
     */
    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);
    }

char数组容量扩大至原来的2倍

将原有数据拷贝到新数组中。

 

子类的append的方法返回值类型为StringBuilder 父类的为AbstractStringBuilder类型

他们之间的转换牵扯到向上转型或者向下转型。

 

至于其他的append重载方法  操作与此相似。

字符串连接操作下的String和StringBuilder(二),布布扣,bubuko.com

字符串连接操作下的String和StringBuilder(二)

标签:style   blog   color   java   使用   strong   io   数据   

原文地址:http://www.cnblogs.com/sphere/p/3877430.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!