(底层图解)为什么StringBuilder ,StringBuffer拼接要比字符串拼接更快?

本文探讨了Java中字符串拼接的内存消耗问题,指出字符串每次拼接都需要申请新空间,而StringBuilder则可以在原地址修改,减少内存开销。通过举例说明,解释了StringBuilder如何更高效地利用内存,特别是在大量拼接操作时。建议在关心性能的场景下使用StringBuilder代替字符串连接。

我们首先要知道,在操作系统是上内存是以页为单位分配的。

java中的字符串不能在原地址修改,每次都需要申请新空间,11个字符串共需要申请11个空间 (操作系统要以4kb为单元分配)。实际上消耗11个页单元,44kb。

字符串每次申请空间是用多少申请多少,字符串每拼接一次都要重新申请一个存储单元

字符串拼接会对内存造成极大消耗。而

StringBuilder 一上来就申请足够的空间,而且它的内容可以修改。

比如:char[] arr=new char[4096];

上来申请两个页空间,原char数组是比较大的,所以拼接的时候在页空间加就完事了。

满了之后呢,在其他地方在申请大空间。

因为字符串拼接不可变 每次改变值都需要申请空间,而这个StringBuilder申请的空间,只有满了才要需要申请新空间。它支持原地址修改值,字符串不支持,拼接次数越多二者消耗内存空间差距越大。

有兴趣的可以自行测试一下

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值