我们首先要知道,在操作系统是上内存是以页为单位分配的。
java中的字符串不能在原地址修改,每次都需要申请新空间,11个字符串共需要申请11个空间 (操作系统要以4kb为单元分配)。实际上消耗11个页单元,44kb。
字符串每次申请空间是用多少申请多少,字符串每拼接一次都要重新申请一个存储单元
字符串拼接会对内存造成极大消耗。而
StringBuilder 一上来就申请足够的空间,而且它的内容可以修改。
比如:char[] arr=new char[4096];
上来申请两个页空间,原char数组是比较大的,所以拼接的时候在页空间加就完事了。
满了之后呢,在其他地方在申请大空间。

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

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

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



