StringBuffer类

📅 2026/7/24 20:11:22
StringBuffer类
目录一、使用场景二、StringBuffer类三、缓冲区数组类型一、使用场景每一次字符串拼接后如果常量池中没有该字符串那么会在常量池实例化新的字符串频繁的字符串拼接会占用大量的方法区中字符串常量池内存。StringBuffer每次都会对StringBuffer对象本身进行操作而不是在常量池中生成新的对象。二、StringBuffer类StringBuffer初始化容量为16 byte[]整形数组JDK8是char[]字符数组在创建StringBuffer的时候尽可能给定一个合适的初始化容量减少自动扩容频率。每次append()拼接字符串都会将字符串的每一个字符转为整形存到下标中拼接结束后调用toString()方法生成String对象到字符串常量池同一个StringBuffer可以复用使用setLength(0)清空缓冲区。StringBuffer对方法加了synchronized同步锁所以是线程安全的。StringBuilder并没有对方法进行加同步锁所以是非线程安全的。“”和“”是专门为String类重载过的语法糖本质也是调用StringBuilder的 append() 方法实现的拼接完成之后调用toString()得到一个String对象。importjava.lang.StringBufferpublicclassTest{publicstaticvoidmain(String[]args){//默认容量为16StringBufferstringbuffernewStringBuffer(50);//给定一个合适的容量//拼接字符串统一调用append方法stringbuffer.append(100);stringbuffer.append(abcd);stringbuffer.append(true);stringbuffer.append(100l);stringbuffer.append(3.1415926);//append进行拼接的时候如果数组满了会自动扩容但是扩容会降低效率Stringsstringbuffer.toString();System.out.println(s);}}结果是100abcdtrue1003.1415926三、缓冲区数组类型JDK8缓冲区是char[]数组但是JDK9变成了byte[]数组核心原因是char在Java中占用两个字节。JDK9中缓冲区有两种模式默认byte[]数组每个字节能够完全表示字母、数字、半角符号当出现中文字符时一个字节无法表示才会转换为char[]数组。