StringBuffer:目的是用来解决字符串相加拼接时带来的性能问题(常量与变量);String拼接字符串会产生大量垃圾对象;
其内部实现采用字符数组,默认数组长度为16,超过数组大小时,动态扩容算法是原来的长度*2+2;
所以当我们预知到添加的数据长度时,建议使用带初始化容量的构造方法,来避免扩容.提高效率;
String s1="a";
String s2=s1+1+2+s1;//a12a:常量相加没有性能问题(编译期进行优化);
System.out.println(s2);
StringBuffer sb=new StringBuffer(20);//默认构造方法长度是16,大于即推荐使用带容量构造方法;
sb.append(s1).append(1).append(2);//相加拼接字符
System.out.println(sb);
append(数据类型 b):添加;
delete(int start,int end):删除指定位置的内容;
indexOf(String str):字符串查询功能;
insert(int offset,数据类型 b):在指定位置上增加一个内容;
replace(int start,int end,String str):将指定范围的内容替换为其他内容;
substring(int start,int end):截取指定范围字符串;
reverse():字符串反转;
StringBuilder:是StringBuffer的兄弟,一个可变的字符序列,用在字符串缓冲区被单个线程使用的时候,建议使用该类,因为它快;
二者区别:
StringBuffer是线程安全的,性能低,适合在多线程使用,jdk1.0后有的;
StringBuilder是线程不安全的,性能高,适合单线程使用,jdk1.5后有的;
String s1=null;
for(int i=0;i<9;i++){
s1+=i;//每次循环都会产生一个StringBuilder对象实现拼接,性能低,最好手动创建StringBuilder对象拼接
}
StringBuilder sbe=new StringBuilder(20);
for (int j=0;j<9;j++){
sbe.append(j);
}
System.out.println(sbe);
本章概述了java中的StringBuffer和StringBuilder的使用和区别,二者的选择可以根据项目中不同功能的实现而选择变动,都是处理字符串优秀工具;
有哪里不足或者有更好的建议,欢迎留言吐槽,有哪里不懂的小伙伴,可以私信我,我会一一答复,感谢认可,感谢支持!