java拼接字符串,StringBuilder为什么比String快?

StringBuilder为什么比String快?

因为String用+去拼接字符串,每次都要创建新的对象,即new String。

而StringBuilder用append()方法拼接字符串,不需要创建新的对象。

所以,为什么慢?因为创建对象慢。为什么创建对象慢?因为创建对象要分配内存等等操作。如果只是创建几个对象,还好,不影响,因为基本上没什么区别。如果创建了几万个对象,就开始有影响了。

StringBuilder从始至终只有一个对象,没有创建新的对象,但是也需要分配内存。何时分配内存?就是内存不够的时候,会校验到内存不够,然后自动扩容——但是不是每次拼接都会扩容,因为扩容之后,可能拼接了很多次,但是StringBuilder刚刚扩容申请的内存仍然是够的,那么就不用扩容了,除非下次又不够了,才会继续扩容内存。

源码分析

String

上面说到String某次拼接都会创建新的对象,为什么?因为String的数据是常量,不能被改变。

既然原始字符串对象的数据不能被改变,现在又要拼接成一个新的字符串,怎么办?只能创建新的对象。

StringBuilder

参考

zhuanlan.zhihu.com/p/65628607

www.bilibili.com/read/cv1226…

www.javashuo.com/article/p-k…

juejin.cn/post/684490…

www.cnblogs.com/xiaofuge/p/…

猜你喜欢

转载自juejin.im/post/7017258587361640478