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

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

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

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

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

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

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

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

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

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

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


版权声明:本文为hefangxuxing原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。