StringBuffer类
1.引入
任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的只不过是其引用的指向而已。
由于String的不可改性,为了方便字符串修改,提供了StringBuffer类,在String中使用"+"来进行字符串连接,但是这个操作在StringBuffer中需要改为append()方法
public synchronized StringBuffer append(各种数据类型 b)
2.基本使用
StringBuffer和String最大的区别在于:String的内容无法修改,而StringBuffer的内容可以修改。如果需要频繁需改字符串,那么建议使用StringBuffer。如下
public class C{
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("Hello").append("zoujier");
fun(sb);
System.out.println(sb);
}
public static void fun(StringBuffer temp){
temp.append("\n").append("www.zoudapaochibaba.cn");
}
}
//输出
//Hellozoujier
//www.zoudapaochibaba.cn
3.String和StringBuffer继承结构
String类 | StringBuffer类 |
---|---|
public final class String implements java.io.Serializable,Comparable,CharSequence | public final class StringBuffer extends AbstractStringBuider implements java.io.Serializable,CharSequence |
可以看出两个类都是"CharSequence"接口的子类,这个借口描述的是一系列字符集。所以字符串时字符集的子类,以后见到CharSequence最简单的联想就是字符串。
4.String和StringBuffer的转换
String和StringBuffer类不能直接转换,想要互相转换需要采用以下原则
4.1.String变为StringBuffer:利用StringBuffer的构造方法append()方法
4.2.StringBuffer变为String:调用toString()方法
5.除append()外StringBuffer类中一些String类没有的方法
5.1.字符串反转
public synchronized StringBuffer reverse()
范例
StringBuffer s = new StringBuffer("zoujierchibaba");
System.out.println(s.reverse());//ababihcreijuoz
5.2.删除指定范围数据
如果删除区间的后半部分超过最字符串范围,默认删除到最后结束
public synchronized StringBuffer delete(int start,int end)
范例
StringBuffer s = new StringBuffer("hellozoujier");
System.out.println(s.delete(5,7));//hellojier
5.3.插入数据
会从offset当前对应的索引位置插入,而不是从offset位置后面开始插入
public synchronized StringBuffer insert(int offset,各种数据类型 b)
范例
StringBuffer s = new StringBuffer("hellojier");
System.out.println(s.delete(5,10).insert(0,"你好"));//你好hello
6.String和StringBuffer、StringBuilder的区别
6.1.String内容不可修改,StringBuffer和StringBuilder内容可以修改
6.2.StringBuffer采用同步处理,属于线程安全操作,StringBuilder采用异步处理,属于线程不安全操作。