Java常用类 StringBuilder类详解

StringBuilder 类

底层

  • final修饰符类,不可被继承
    Java常用类 StringBuilder类详解

  • 含有参和无参构造器

无参 StringBuilder s2 = new StringBuilder();

底层步骤

Java常用类 StringBuilder类详解
调用父类构造器,默认参数为16

Java常用类 StringBuilder类详解
父类为AbstractStringBuilder,成员变量字符数组vlalue和整形变量count;

Java常用类 StringBuilder类详解

将value数组长度赋为16

有参 StringBuilder s1 = new StringBuilder(“abc”);
步骤

Java常用类 StringBuilder类详解
分为两大部分
首先我们看看super即调用父类构造器器
进入super(str.lenth()+16)
Java常用类 StringBuilder类详解
定义了一个字符长度为19(str.lenth()+16)的字符数组char;

然后我们进去append(str)
Java常用类 StringBuilder类详解
super.append(std)调用了父类的appernd方法
进去后
Java常用类 StringBuilder类详解
解释:首先定义len等于str长度即为3,然后进入 ensureCapacityInternal方法,参数3Java常用类 StringBuilder类详解
不满足条件,返回(其实这个函数是判断新加字符串长度是否超出19)
,然后执行
str.getChars(0, len, value, count); //将str字符串从0开始到str长度结束全部复****制到起始位置为count的字符value内

那么当str长度太大了,导致无法添加到value数组内怎么办呢?
那么就是执行ensureCapacityInternal方法
Java常用类 StringBuilder类详解

这个方法目的其实是扩充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数组的起始位置。