StringBuffer类
● StringBuffer类概述
我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间。而StringBuffer就可以解决这个问题线程安全的可变字符序列
● StringBuffer和String的区别?
● 构造方法
public StringBuffer()
public StringBuffer(String str)
● 添加功能
public StringBuffer append(String str)
public StringBuffer insert(int offset,String str)
● 删除功能
public StringBuffer deleteCharAt(int index)
public StringBuffer delete(int start,int end)
● 替换功能
public StringBuffer replace(int start,int end,String str)
● 反转功能
public StringBuffer reverse()
● 截取功能
public String substring(int start)
public String substring(int start,int end)
● 截取功能和前面几个功能的不同
返回值类型是String类型,本身没有发生改变
package com.ffyc.javaapi.stringdemo.buffer;public class StringBufferDemo {public static void main(String[] args) {/*线程安全, 底层可变字符串char[] value;AbstractStringBuilder(int capacity) {value = new char[capacity];}super(16); 默认长度super(str.length() + 16); 使用传入字符串创建对象,生成的底层数组为传入的字符串长度+16当向StringBuffer中添加内容时,是将内容添加到底层的数组中,数组没有被final修饰,当数组装满时,会创建一个新的数组,将新数组地址给底层数组,StringBuffer对象是不会改变的.*/ //new StringBuffer(30); 指定生成底层数组的长度//new StringBuffer();// 默认底层char数组长度是16/* StringBuffer stringBuffer = new StringBuffer("abcd");//20stringBuffer.append("efg111");stringBuffer.append("efg2222");stringBuffer.append("efg2222");//向末尾追加内容,当数组装满时创建新的底层数组System.out.println(stringBuffer);*/StringBuffer stringBuffer = new StringBuffer("abcdefg");//23//stringBuffer.insert(2,"xx");//向指定的位置插入字符串//stringBuffer.deleteCharAt(1);//删除指定位置的字符//stringBuffer.delete(0,3);//删除指定区间的内容 包含开始,不包含结束//stringBuffer.replace(0,3, "XXX");//替换//stringBuffer.reverse();//逆序字符串//String sub = stringBuffer.substring(2);//截取从指定位置开始到结束一个字符串副本返回//String sub = stringBuffer.substring(2,5);//截取从指定位置开始到指定位置结束一个字符串副本返回//System.out.println(sub);System.out.println(stringBuffer);String s1 = "abcd";System.out.println(s1.length());//4System.out.println(stringBuffer.length());//返回的是底层数组中实际转入的字符个数stringBuffer.append("efg111");}
}
● StringBuilder类功能和StringBuffer功能完全一致, StringBuffer是线程安全的
public class StringBuilderDemo {/*多线程不安全 可变字符串这两个类的区别@Overridepublic StringBuilder append(String str) {super.append(str);return this;}@Overridepublic synchronized StringBuffer append(String str) {toStringCache = null;super.append(str);return this;}String : 底层都是数组实现 final char[] 值不能改变, 改变后会创建一个新的对象StringBuffer : 线程安全的 可变字符串 char[]StringBuilder: 线程不安全 可变字符串*/public static void main(String[] args) {// new StringBuilder();// new StringBuilder("abcd");StringBuilder stringBuilder = new StringBuilder(30);stringBuilder.append("aaa");stringBuilder.insert(2,"aaaa");}
}
● String:是字符常量,适用于少量的字符串操作的情况
● StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
● StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况