目录
- StringBuffer
- StringBuffer简介
- StringBuffer类的继承关系
- StringBuffer类的底层实现
- 创建StringBuffer对象
- StringBuffer类的常用方法
- StringBuilder
- StringBuilder简介
StringBuffer
StringBuffer简介
StringBuffer对象是一个字符序列可变的字符串(String类不可变)。它和StringBuilder类似,但是StringBuffer是线程安全的(应用于多线程不会冲突)。
和String一样,StringBuffer类也是一个final类。
如果需要频繁的改变字符串的内容,就应该选择StringBuffer类或者StringBuilder类。因为这2个类只会在字符缓冲区容量满的时候,才会重新开辟内存空间。
StringBuffer类的继承关系
StringBuffer类直接实现了两个接口:Serializable、Comparable。StringBuffer又继承了AbstractStringBuilder类。AbstractStringBuilder类实现了CharSequence接口和Appendable接口(也就是StringBuffer间接实现了这2个接口,一共实现了4个接口)。
继承关系图为:
StringBuffer类的底层实现
和String类类似,StringBuffer类也是通过byte[]数组存储可变字符序列。因此StringBuffer对象存储的每个字符也占1个字节。
和String类不同的是,StringBuffer类的byte[]数组没用final修饰。
创建StringBuffer对象
介绍常用构造器:
- public StringBuffer(); 创建一个字符序列为空的字符缓冲区,初始容量为16个字符。
- public StringBuffer(int capacity); 创建一个不带字符,但具有指定初始容量的字符串缓冲区。
- public StringBuffer(String str); 创建一个字符串缓冲区,其字符序列为指定的字符串参数。缓冲区初始容量为16+字符串参数的长度。 如果str = null,会抛出NullPointerException异常。
StringBuffer类的常用方法
- public StringBuffer append(String str); 把指定的字符串加到此字符序列的末尾。如果str = null,就把null转换为"null"存储进StringBuffer。
- public int capacity(); 返回缓冲区当前容量。
- public char charAt(int index); 返回字符序列指定索引位置的字符。
- public int indexOf(String str); 返回第一次出现相同值的子字符串的首字符索引。
- public StringBuffer delete(int start, int end); 移除[start, end)中的字符,并返回该字符串。
- public StringBuffer replace(int start, int end, String str); 用传入的字符串替换指定位置部分[start, end)的子字符串。
- public StringBuffer insert(int offset, Object obj); 将Object参数存储的字符串插入到字符序列中,从offset位置前开始插入。
- public int length(); 返回字符序列的字符长度。
StringBuilder
StringBuilder简介
StringBuilder和StringBuffer的用途几乎是一样的。只是StringBuilder在多线程中不安全,但效率比StringBuffer更高。
StringBuilder和StringBuffer很很多相似点,比如都是final类,继承体系都一样,底层都是用byte[]数组存储字符序列。
可以这样理解:如果是单线程环境就首选StringBuilder,这样效率更高;多线程就选StringBuffer,保证同步。