也就意味着每次调用的各种处理方法,返回的字符串都是一个新的,性能上,显然....
所以,对于可变字符序列的需求是很明确的
| 类的层次结构设计,有的时候是自顶而下 有的时候是总结归纳,然后抽象出来一个新的类,这很正常 尽管StringBuffer 要比StringBuilder 和 AbstractStringBuilder要早得多了 但是StringBuffer 现在也继承了这个类 所以说,抛开发展历史的过程不说,直接从类的层级结构设计的角度看的话 你可以认为AbstractStringBuilder 就是对于可变字符序列的这一概念的描述 他提供了可变字符序列的一个基本协议约定,也就是基本的功能方法 作为一个抽象类, 并且也提供了一部分默认的实现 StringBuffer和StringBuilder都是可变的字符序列,所以他们都实现了AbstractStringBuilder |
 |
属性简介
| 内部是一个char[] value,不再是final的了,也就意味着可变 他实现了CharSequence接口意味着他是一个字符序列 实现了Appendable接口,意味着他遵循了追加相关的协议 |
 |
| 内部使用char[] value进行数据存储 , 这个char[] value 是核心 他是有容量大小的,因为数组必然有长度 如果长度没有超出此容量,就无需分配新的内部缓冲区数组 如果内部缓冲区溢出,则此容量自动增大 使用count 记录已经使用的字符个数 还可以通过有参数的构造方法进行初始化设置value这个字符数组的大小 当然构造方法不是给你用的,是给子类用的 既然本质是一个char[] 字符数组,所以可以说所有的操作都是对于数组的操作 那么对于一个字符序列,有哪些方法是刚需呢? 也无外乎添加元素/删除元素/更新元素/获取元素 这几种 添加有可能是插入中间或者在最后追加 我们知道,数组是顺序存储 所以对于插入这种操作必然会出现大量的元素移动情况 |
属性获取
既然是内部维护了字节数组
必然这个数组本身属性,长度 ,使用个数的获取,以及数组的扩大也有相对应的方法可以使用
| length() 获取实际数据的个数 capacity() 数组的大小 所以是容量 |  |