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

重点关注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(二)

时间: 2024-10-11 04:22:29

字符串连接操作下的String和StringBuilder(二)的相关文章

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

看第一种情形:用String做字符串连接操作  连接一万次 public class Demo_01 { public static void main(String[] args) { String str = "123"; String[] temp = new String[10000]; for (int i = 0; i < temp.length; i++) { temp[i] = "456"; } long begin = System.nano

php大力力 [024节]PHP中的字符串连接操作(2015-08-27)

2015-08-27 php大力力024.PHP中的字符串连接操作 PHP中的字符串连接操作  阅读:6185次   时间:2012-03-25 PHP字符串的连接的简单实例 时间:2013-12-30 很多时候我们需要将几个字符串连接起来显示,在PHP中,字符串之间使用“点”来连接,也就是英文中的句号”.”,具体使用方式如下 //定义字符串 $str1 = "Hello World!"; $str2 = "Welcome to HutaoW's BLOG!"; /

string和stringbuilder的个人总结

String和StringBuilder的深入解析   前言:本文出发点是我们开发的过程中是否真正的理解stringbuilder的使用,string字符串操作的是如何实现(哈希表),stringbuilder是否设置默认值容量,什么时候才用stringbuilder. 一概念String和stringbulider的理解 string是我们用的最多的类型之一,是一个特殊的引用类型,直接派生于Object,因此它的值储存在托管堆上.构造一个新字符串的时候,不需要用new.它是”不可变的“.初始化

C#中string和StringBuilder的区别

string在任何语言中都有它的特殊性,在.NET中也是如此.它属于基本数据类型,也是基本数据类型中唯一的引用类型.字符串可以声明为常量,但它却放在了堆中. 一:不可改变对象 在.NET中String是不可改变对象,一旦创建了一个String对象并给它赋值,它就不可能再改变,也就是你不可能改变一个字符串的值.这句活初听起来似乎有些不可思议,大家也许马上会想到字符串连接操作,我们不也可以改变字符串吗?看下面的这段代码: public static void Main(string[] args)

(转)c# String与StringBuilder

阅读目录 1.什么时候用String?什么时候用StringBuilder? 2.String与StringBuilder的区别 总结 1.什么时候用String?什么时候用StringBuilder? 字符串一旦创建就不可修改大小,每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵.如果要修改字符串而不创建新的对象,则可以使用Syste

转:String StringBuffer StringBuilder区别

转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸裸的站在我们这些Java色狼面前了.嘿嘿.... 众所周知,String是由字符组成的串,在程序中使用频率很高.Java中的String是一个类,而并非基本数据类型. 不过她却不是普通的类哦!!! [镜头1] String对象的创建       1.关于类对象的创建,很普通的一种方式就是利用构造器,

java中String与StringBuilder的区别

本篇文章介绍了,java中String与StringBuilder的区别. 相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,今天我在这里重新把这个概念给大家复习一下,顺便牵出 J2SE 5.0 里面带来的一个新的字符操作的类—— StringBuilder (先别忙着扔我砖头,我还算清醒,我这里说的不是 C #, Java 也有 StringBuilder 类).那么这个 StringBuilder 和

解析C#中的string和StringBuilder的区别

string的缺点是每次字符串变量的内容发生了改变时,都必须重新分配内存.你想想,如果创建一个迭代100000次的循环,每次迭代都将一个字符连接到字符串,这样内存中就会有100000个字符串,每个字符串仅仅与前一个字符串相伴只是有一个字符不同,性能影响是很大的.StringBuilder通过分配一个缓存,就是一个工作区来解决这些问题,在工作区中队字符串应用StringBuilder类的相关方法.包括添加,删除,移除,插入和替换字符等等.执行完之后,将调用ToString方法把工作区中的内容转换为

C# string和StringBuilder的区别

主要的区别在于 stringbuilder相对于string,效率要高些,string会在每次改变的时候进行内存重新组合,而stringbuilder则不会从新组合,另外stringbuilder有append,insert,replace 等一些方法,用起来比较方便.String 对象是不可改变的.每次使用 System.String 类中的方法之一或进行运算时(如赋值.拼接等)时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.而 StringBuilder 则不会.在需