码迷,mamicode.com
首页 > 编程语言 > 详细

java.lang.StringBuilder和java.lang.StringBuffer

时间:2017-10-12 21:33:34      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:int   大小   boolean   序列化   重新定义   col   mini   class   creat   

这两个类都是继承自AbstractStringBuilder,AbstractStringBuilder有两个成员属性

1 char[] value;
2 int count;

前者用于存储字符串,后者用于统计实际使用了多少位,也就是实际存入字符串长度。当new一个StringBuilder或者StringBuffer的时候,默认capacity为16,也即声明出一个16大小的字符数组,此时count=0,value.length=16。

1 public StringBuilder()   // 初始char[]长度为16
2 public StringBuffer()     // 初始char[]长度为16
3 
4 public StringBuilder(String str)  // 初始char[]长度为str.length+16
5 public StringBuffer(String str)    // 初始char[]长度为str.length+16

在StringBuilder中基本上自身并没有重新定义什么方法,都是通过super调用的父类AbstractStringBuilder中定义的方法。

在StringBuffer中情况类似,基本上也没有重新定义什么方法,也都是调用父类AbstractStringBuilder中的方法,不过调用的时候方法都是加上了synchronzied,增加了同步锁保证线程安全。在方法前面加上synchronized作用对象是调用该方法的对象实例。

此外StringBuffer中增加了一个私有成员变量:

1 private transient char[] toStringCache

transient短暂的意思,是个关键字,用它声明的实例变量,其值不需要维持,换言之序列化的时候不会参与序列化过程。

    // StringBuilder
    public String toString() {
        // Create a copy, don‘t share the array
        return new String(value, 0, count);
    }
    
    // StringBuffer
    public synchronized String toString() {
        if (toStringCache == null) {
            toStringCache = Arrays.copyOfRange(value, 0, count);
        }
        return new String(toStringCache, true);
    }

在toString方法中,StringBuffer是将内容拷贝到toStringCache,然后再构造String。toStringCache在任何修改都会被清空置为null。

下面直接看下AbstractStringBuilder类的方法。

1 public void ensureCapacity(int minimumCapacity)

该方法用于扩大value的容量,minimumCapacity如果大于value.length则newCapacity = max{value.length*2 + 2, minimumCapacity},如果newCapcity > MAX_ARRAY_SIZE则最终的capacity = max{minimumCapacity, MAX_ARRAY_SIZE}。其中MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8 。

在类中定义了各种append方法,如果append方法的参数为null的时候,append结果是将“null”字符串加到现有字符数组后面,而不是什么都不加。如果append(boolean),则是将“true”或者“false”添加到现有字符数组的最后。

AbstractStringBuilder主要定义的是各种append和insert方法。难度都不大,这里不赘述了~~

 

java.lang.StringBuilder和java.lang.StringBuffer

标签:int   大小   boolean   序列化   重新定义   col   mini   class   creat   

原文地址:http://www.cnblogs.com/snowater/p/7652558.html

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