StringBuffer类
2026/7/24 20:11:18 网站建设 项目流程

目录

  • 一、使用场景:
  • 二、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){//默认容量为16StringBufferstringbuffer=newStringBuffer(50);//给定一个合适的容量//拼接字符串统一调用append()方法stringbuffer.append(100);stringbuffer.append("abcd");stringbuffer.append(true);stringbuffer.append(100l);stringbuffer.append(3.1415926);//append()进行拼接的时候如果数组满了会自动扩容,但是扩容会降低效率Strings=stringbuffer.toString();System.out.println(s);}}结果是:100abcdtrue1003.1415926

三、缓冲区数组类型

JDK8缓冲区是char[]数组,但是JDK9变成了byte[]数组,核心原因是char在Java中占用两个字节。JDK9中缓冲区有两种模式,默认byte[]数组,每个字节能够完全表示字母、数字、半角符号,当出现中文字符时一个字节无法表示,才会转换为char[]数组。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询