StringBuffer类概述
当我们对字符串进行拼接操作的时候,每次拼接,都会创建一个新的String对象,这样的话既耗时又浪费空间。
而StringBuffer可以解决这个问题。
StringBuffer类是线程安全的可变字符序列,是一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
构造方法
StringBuffer类重载了构造方法,且含有空参构造。
StringBuffer的常用方法
capacity()方法:
该方法获取当前容量。理论值
length()方法:
获取长度即字符数。实际值
StringBuffer类的添加功能
append()方法:
可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身。
上述方法是将String类型的数据添加到字符串缓冲区里,然后返回字符串缓冲区本身。
insert()方法:
在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身。
上述方法是在指定位置将String类型的数据插入到字符串缓冲区里,并返回字符歘缓冲区本身。
StringBuffer类的删除功能
deleteCharAt()方法:
该方法删除指定位置的字符,并返回本身。
delete()方法:
该方法删除从指定位置开始指定位置结束的内容,并返回本身。
StringBuffer类的替换和反转功能
替换功能:
replace()方法:
该方法是将从start开始到end的字符串用str替换,并返回本身。
反转功能:
reverse()方法:
该方法进行字符串的反转,并返回本身。
StringBuffer的截取功能
substring()方法:
从指定位置截取到末尾,返回值类型不再是StringBuffer本身,而是String类型。
从指定位置开始到结束位置进行截取,包括开始位置,不包括结束位置。返回值类型不再是StringBuffer本身,而是String类型。
StringBuffer和String的相互转换
String到StringBuffer:
- 通过构造方法
- 通过append()方法
StringBuffer到String:
- 使用substring方法
- 通过构造方法
- 通过toString()方法
String和StringBuffer分别作为参数传递
- String作为参数传递:String虽然是引用类型,但是它是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递,即值传递。
- StringBuffer作为参数传递,是引用传递,形参的改变会影响实参。
StringBuffer和StringBuilder的区别
StringBuilder类是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。