StringBuffer和StringBuilder
StringBuffer
StringBuffer概述
StringBuffer是线程安全的可变字符序列,构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。它是一个类似于 String
的字符串缓冲区,但不能修改,通过某些方法调用可以改变该序列的长度和内容。
StringBuffer可将字符串缓冲区安全地用于多个线程。StringBuffer的主要操作是append和insert
方法,可重载这些方法,以接受任意类型的数据。
String、StringBuffer、StringBuilder的区别
- 添加新的内容之后String类型就会生成新的字符串;但是StringBuffer添加新的内容之后返回的还是原来的容器。
- StringBuider在大多数实现中,它比StringBuffer要快。
StringBuffer的常用
- append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
- insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身。
- deleteCharAt(int index):删除指定位置的字符,并返回本身。
- delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身。
- replace(int start,int end,String str):从start开始到end用str替换。
- reverse():字符串反转。(反转字符串中的元素)
- substring(int start):从指定位置截取到末尾。
- substring(int start,int end):截取从指定位置开始到结束位置,包括开始位置,不包括结束位置。
- String和StringBuffer可以通过.append()方法实现转换;StringBuffer和String可以通过.toString方法实现转换。
StringBuffer的基本代码演示
public class MyTest7 {
public static void main(String[] args) {
//字符串一旦定义之后,长度是不可变的
String str = "abc" + "ccc" + "dddd" + "eee";
//如果我要采用+号大量拼串,就会在内存中从新开辟新空间放新的字符串,比较浪费空间
//StringBuffer():构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
//创建一个字符容器
StringBuffer s = new StringBuffer();
//获取字符容器的容量
int capacity = s.capacity();
System.out.println(capacity);//返回int类型数值,表示容器可以装多少元素
//获取长度
int length = s.length();
System.out.println(length);//返回int类型数值,表示容器内有多少元素
// 往容器中添加内容
StringBuffer s2 = s.append(100); //往容器中添加了一个int类型的数据
capacity = s.capacity();//获取字符容器的容量赋给capacity
System.out.println(capacity);
//获取长度
length = s.length();//获取字符容器的长度赋给length
System.out.println(length);
System.out.println(s2);
//多添加几个元素
s2.append("qingjiaowogangtiexia!!231");
System.out.println(s2);
//获取容量
capacity = s.capacity();
System.out.println(capacity);
//获取长度
length = s.length();
System.out.println(length);
}
}
StringBuilder
一个可变的字符序列,该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。StringBuider在大多数实现中,它比StringBuffer要快。
和StringBuffer相似,在StringBuilder上的主要操作是append和insert方`append方法始终将这些字符添加到生成器的末端;而insert方法则在指定的点添加字符。
将StringBuilder的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用StringBuffer。