- StringBuffer类和String类都是用于表示字符串的,只是它们的内部实现方式不同。
- String保存的是字符串常量,里面的值不能被修改,每次String类更新实际上就是更改地址,效率较低 //private final char value[]
- StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上是更新内容,不是每次都(即不是每次都创建新对象)更新地址,效率较高 //char value[] //放在堆里,所以效率比String高
- String类创建的字符串对象是不可以被修改的,也就是说,String字符串不能被修改、删除或替换字符串中的某个字符;而StringBuffer类创建的字符串对象是可以被修改的。
StringBuffer对象的初始化和String对象的初始化相同,通常使用如下构造方法进行初始化:
StringBuffer s = new StringBuffer();//空对象
如果想要创建带参数的,代码如下
StringBuffer s = new StringBuffer("abc");
String对象和StringBuffer对象属于两个不同的类型,不能直接进行强制类型转换。
//创建一个大小为16的char[],用于存放字符内容,构造一个其中不带字符的字符串缓冲区
StringBuffer stringbuffer1 = new StringBuffer();
//通过构造器指定大小的char[]
StringBuffer stringbuffer2 = new StringBuffer(100);
//通过给一个String创建StringBuffer,char[]大小就是str.length()+16
StringBuffer str = new StringBuffer("Hello, World");
2.StringBuffer类的构造方法
StringBuffer类有三个构造方法,分别是:
- StringBuffer()
- StringBuffer(int size)
- StringBuffer(String s)
- 在使用第一个无参构造方法创建对象后,分配给该对象的初始容量可以容纳16个字符。当该对象的实体存放的字符序列的长度大于16时,实训题的容量会自动增加,以便存放所有增加的字符。StringBuffer对象可以通过length()方法获取实体中存放的字符序列的长度,并通过capacity()方法获取当前时题的实际容量。
- 在使用第二个带有int参数的构造方法创建StringBuffer对象后,分配给该对象的初始容量由参数size指定的。当该对象的时题存放的字符序列的长度大于size时,实体的容量会自动增加,以便存放所有增加的字符。
- 在使用第三个带有String参数的构造方法创建StringBuffer对象后,分配给该对象的初始容量为在参数字符串s的长度基础上增加16个字符。
- append()方法
- charAt()方法
- insert()方法
- reverse()方法
- delete()方法
- replace()方法
//String-->StringBuffer
String str = "hello";
//1.使用构造器
//返回的是StringBuffer对象,对str没有影响
StringBuffer stringbuffer = new StringBuffer(str);
//2.使用append()方法
StringBuffer stringbuffer1 = new StringBuffer();
stringbuffer1 = stringbuffer1.append(str);
//StringBuffer-->String
StringBuffer stringbuffer3 = new StringBuffer("HELLO,WORLD");
//1.使用StringBuffer同宫的toString方法
String s = stringbuffer3.toString();
//2.使用构造器
String s1 = new String(stringbuffer3);
StringBuffer增删改查插长度
StringBuffer s1 = new StringBuffer("hello");
//增
s1.append(",");
s1.append(true);
s1.append("true").append(100).append(4).append("你好");
System.out.println(s1);
//删
//删除的区间为[0,3)
s1.delete(0, 3);
System.out.println(s1);
//改(替换)
//替换区间为[0,3)
s1.replace(0, 3, "你好呀");
System.out.println(s1);
//查
int indexof = s1.indexOf("4你好");
System.out.println(indexof);
//插
s1.insert(0, "我的世界");
System.out.println(s1);
//长度
System.out.println(s1.length());
注意
- StringBuffer 是一个final类 不能被继承
- StringBuffer 的直接父类是 AbstractStringBuilder



