1 特点
定义:线程安全的可变字符序列,用于表示可修改的字符串。
作用:创建StringBuffer类的对象后,可以随意修改、变更字符串的内容。
(1)字符串缓冲器(容器)
(2)长度是可变的,可以存储任意数据类型,但是不同数据类型都会先转为字符串形式之后在进行存储
(3)提供了可以改变该序列的长度和内容的方法
(4)所有的数据最终都需要变成字符串
2 使用方法
(1)追加 append();
(2)插入 insert();
(3)移除 delete();
(4)替换 replace();
public static void main(String[] args) {
//创建字符串缓冲区(StringBeffer对象)
//调用无参构造方法,默认初始容量为16,如果超过容量会继续进行扩容
StringBuffer sb = new StringBuffer();
// 向容器中添加数据
sb.append("abc"); //结果:abc
sb.append(true); //结果:abctrue
sb.append("1").append("x"); //结果:abctrue1x
//多次调用append()方法的过程叫方法调用链
// 在指定的位置进行添加
sb.insert(1, "coco");//结果:acocobctrue1x
// 移除指定区间(位置)数据
sb.delete(2, 10);//结果:ace1x
sb.deleteCharAt(3);//结果:acex
// 替换数据
sb.replace(0, 2, "666");//结果:666ex
}
3 可变字符序列转为字符串
StringBuffer类只是一个容器,是用来对可变字符序列的长度和内容进行操作的,其并不等价于字符串。若想使用String类的方法,要先将 StringBuffer字符串缓冲区转为String数据类型类型在进行调用String的相关方法。
转为字符串使用toString()方法。
StringBuffer sb1 = new StringBuffer();
String s =sb1.append("coco").append(123).toString();
System.out.println(s);
4 字符串和连接符内部原理
String s1 = "coco--"+5+"--xiaoran";
//内部原理
s1 = new StringBuffer().append("coco--").append(5).append("--xiaoran").toString();
System.out.println(s1);
//结果:coco--5--xiaoran
5 改进:StringBuilder类(不同步)
场景:多个人在访问一个StringBuffer对象时,
小红:插入insert();
小明:追加append();
小王:移除delete();
如果这几个人同时操作数据就会出现问题,StringBuffer类就添加了线程锁。同一时间只能有一个人访问,等这个人操作完数据之后,下个人才能访问。这样就保证了数据的安全性,但同时效率不高。就引入了StringBuilder类。
被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候。
6 StringBuffer和StringBuilder区别
StringBuffer:线程安全,同步的,效率低;
StringBuilder:线程不安全的,不同步的,效率高。