StringBuffer类
458字约2分钟
2025-09-23
StringBuffer
类相当于是String
的增强类StringBuffer
代表的是可变的字符序列,就是说可以对字符串的类容进行修改,不用像String
那样要重新创建StringBuffer
是final
类不能被继承StringBuffer
是将字符串存放在父类中的字符数组中,而该数组不是final
类型的,所以更改StringBuffer
的字符串是不会重新创建新的对象
String
和 StringBuffer
区别
String
变量的 “赋值” 操作,本质是让变量指向新的String
对象(原有对象不变)。- 由于
String
的不可变性,任何 “修改” 字符串内容的操作(包括赋值、拼接、替换等)都会产生新对象。 - 唯一例外是复用字符串常量池中的现有对象时,不会创建新对象,但这是引用复用,而非修改。
如果需要频繁修改字符串内容,建议使用 StringBuilder
或 StringBuffer
,它们是可变的,可避免频繁创建对象带来的性能损耗
String与StringBuffer转换
// String 转 StringBuffer
String a = "a";
// 方法一
StringBuffer b = new StringBuffer(a);
// 方法二
StringBuffer c = new StringBuffer();
c.append(a);
// StringBuffer 转 String
StringBuffer c = new StringBuffer(a);
// 方法一
String a1 = c.toString();
// 方法二
String a2 = new String(c);
StringBuffer方法
追加(append)
StringBuffer a = new StringBuffer("he");
a.append("llo");
a.append(",world");
System.out.println(a);
// 结果
hello,world
删除(delete)
StringBuffer a = new StringBuffer("hello,world");
// 去掉下标 2 ~ 5 - 1 范围的字符
a.delete(2, 5);
System.out.println(a);
// 结果
he,world
修改(replace)
StringBuffer a1 = new StringBuffer("hello,world");
a1.replace(2, 5, "iii");
System.out.println(a1);
// 结果
heiii,world
插入(insert)
StringBuffer a2 = new StringBuffer("hello,world");
// 在下标为2的字符前添加内容
a2.insert(2,"iii");
System.out.println(a2);
// 结果
heiiillo,world
长度(length)
StringBuffer a3 = new StringBuffer("hello,world");
System.out.println(a3.length());
// 结果
11