使用StringBuffer字符串拼接目的就是为了让字符串占用的内存空间减少,提高效率
思考:我们在实际的开发中,如果需要进行字符串的频繁拼接,会有什么问题?
答案:
因为java中的字符串是不可变的,每一次拼接都会产生新的字符串,这样会占用大量的方法区内存,造成内存空间的浪费
底层分析:

代码演示:
public class StringTest05 {
public static void main(String[] args) {
String s="abc";
s+="hello";
System.out.println(s);
//以后要进行大量字符串操作的时候,尽量用JDK自带的StringBuffer
//创建一个初始化容量为16个byte[]数组,也叫做字符串缓冲区对象
//50是初始的容量大小为50,不是16了,默认情况才是16
StringBuffer stringBuffer=new StringBuffer(50);
//以后拼接字符串,统一调用append()方法进行追加
stringBuffer.append("a");
stringBuffer.append("b");
stringBuffer.append(3.15);
System.out.println(stringBuffer);
}
}
管中窥豹:
在String类中底层代码其实是字符类型的数组char[] ,另外,用final修饰,也就意味着,String在直接创建的时候,根据其底层是final修饰的数组这个前提下,我们得知,一旦创建,其长度和内存地址不会发生改变

管中窥豹:
StringBuffer中是创建一个16个空间的字符数组

底层调用的是数组的拷贝

画图分析:(使用String直接创建字符串和使用StringBuffer追加字符串的不同)
String是写死容量,你创建多少就使用多少
StirngBuffer是动态容量,你创建的初始空间是16个字符,后续如果超过此数据后,会创建一个更大的数组存储,那么之前存储的数据首先会拷贝进新的数组内,旧的数组会有垃圾回收机制回收

如何优化StringBuffer的性能:
在创建StringBuffer的时候尽可能给定一个初始化容量
最好减少底层数组的扩容次数,预估计以下,给一个足够你创建样本数据的初始化容量
本文探讨了在Java开发中频繁使用字符串拼接可能导致的问题,由于String对象不可变,每次拼接会产生新对象,消耗大量内存。转向StringBuffer,它通过动态扩容的字符数组实现,有效提高了效率。文章通过代码示例和内存分析,揭示了StringBuffer的工作原理,并给出了优化性能的建议,如预估初始化容量。
&spm=1001.2101.3001.5002&articleId=114707572&d=1&t=3&u=556f3888ea9c497b9fbf378f08aca08e)
6779

被折叠的 条评论
为什么被折叠?



