StringBuffer类/线程安全 可变字符串/
概述
我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String 对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题线程安全的可变字符序列 。
当向StringBuffer中添加内容时,是将内容添加到底层的数组中,数组没有被final修饰,当数组装满时,会创建一个新的数组,将新数组地址给底层数组,StringBuffer对象是不会改变的。
构造方法
public StringBuffer()
public StringBuffer(String str)
添加功能
public StringBuffer append(String str) //向末尾追加内容
new StringBuffer();//默认底层char数组长度是16 new StringBuffer("abcd")//长度20=默认数组长度16+4个字符串长度; StringBuffer stringBuffer = new StringBuffer("abcd"); stringBuffer.append("efg111"); stringBuffer.append("efg222"); System.out.println(stringBuffer); 结果:abcdefg111efg222
public StringBuffer insert(int offset,String str) //向指定地方插入字符串
StringBuffer stringBuffer = new StringBuffer("abcd"); stringBuffer.insert(2,"xx"); System.out.println(stringBuffer); 结果:abxxcd
删除功能
public StringBuffer deleteCharAt(int index)
StringBuffer stringBuffer = new StringBuffer("abcd"); stringBuffer.deleteCharAt(1); System.out.println(stringBuffer); 结果:acd
public StringBuffer delete(int start,int end) //删除指定区域的内容 包含开始,不包含结尾
StringBuffer stringBuffer = new StringBuffer("abcdefg"); stringBuffer.delete(0,3); System.out.println(stringBuffer); 结果:defg
public StringBuffer replace(int start,int end,String str) //替换
StringBuffer stringBuffer = new StringBuffer("abcdefg"); stringBuffer.delete(0,3,xxx); System.out.println(stringBuffer); 结果:xxxdefg
反转功能
public StringBuffer reverse()//逆序字符串
StringBuffer stringBuffer = new StringBuffer("abcdefg"); stringBuffer.delete(0,3,xxx); System.out.println(stringBuffer); 结果:gfedcba
截取功能
public String substring(int start)
StringBuffer stringBuffer = new StringBuffer("abcdefg"); String sub = stringBuffer.substring(2); System.out.println(sub); 结果:cdefg
public String substring(int start,int end)
StringBuffer stringBuffer = new StringBuffer("abcdefg"); String sub = stringBuffer.substring(2,5); System.out.println(sub); 结果:cde
● 截取功能和前面几个功能的不同
返回值类型是String类型,本身没有发生改变
StringBuilder类功能和StringBuffer功能完全一致, StringBuffer是线程安全的
StringBuilder类/多线程不安全 可变字符串/
String类StringBuffer类StringBuilder类区别
String :底层都是数组实现 final char[ ] 值不能改变,改变后悔创建一个新的对象
是字符常量,适用于少量的字符串操作的情况
StringBuffer : 线程是安全的,可变字符串 char[ ]
适用于单线程下在字符缓冲区进行大量操作的情况
StringBuilder :多线程不安全 ,可变字符串
适用多线程下在字符缓冲区进行大量操作的情况