Java常用类 StringBuilder类详解
StringBuilder 类
底层
-
含final修饰符类,不可被继承
-
含有参和无参构造器
无参 StringBuilder s2 = new StringBuilder();
底层步骤
调用父类构造器,默认参数为16;
父类为AbstractStringBuilder,成员变量字符数组vlalue和整形变量count;
将value数组长度赋为16
有参 StringBuilder s1 = new StringBuilder(“abc”);
步骤
分为两大部分
首先我们看看super即调用父类构造器器
进入super(str.lenth()+16)
定义了一个字符长度为19(str.lenth()+16)的字符数组char;
然后我们进去append(str)
super.append(std)调用了父类的appernd方法
进去后
解释:首先定义len等于str长度即为3,然后进入 ensureCapacityInternal方法,参数3
不满足条件,返回(其实这个函数是判断新加字符串长度是否超出19)
,然后执行
str.getChars(0, len, value, count); //将str字符串从0开始到str长度结束全部复****制到起始位置为count的字符value内
那么当str长度太大了,导致无法添加到value数组内怎么办呢?
那么就是执行ensureCapacityInternal方法
这个方法目的其实是扩充value数组长度,同时将原先value数组内容转移到新value内(假如是newvalue),则此时value指向另一个数组newvalue
总结;
- SringBuilder类有两个重要的的成员变量,分别是char[] value和 int count;
- 无参默认value长度为16
- 有参时,vlaue长度为str.length()+16,当我们调用append方法新加字符串时,若长度超出这个原先的value长度,那么value会被扩充,扩充长度为两倍原先长度再加2;扩充后value已经不是之前那个value了;count的主要作用是起到一个标记作用,标记下一次新加字符串放入value数组的起始位置。