因为字符串使用+剪接字符串,所以一次创建新对象,即新的字符串。
StringBuilder使用append()方法来拼接字符串而不创建新对象。
那为什么慢呢?因为创建对象很慢。为什么创建者慢?因为创建对象应该分配内存和其他操作。如果只是几个对象,那就可以不影响,因为基本上没有任何对象差异。如果创建了数万个对象,它将开始影响。
StringBuilder从头到尾都只有一个对象,而无需创建新对象,还需要分配内存。分配内存时?当内存不够时,不会检查内存,然后容量将是自动扩展 - 但每次剪接时都可以扩展,因为扩展后可能会剪接多次,但是StringBuilder的内存刚刚扩展了容量仍然足够时间,它将继续扩展内存。
上述字符串将创建新对象,为什么?因为字符串的数据是恒定的,无法更改。
由于原始字符串对象的数据无法更改,如果现在将其缝合到新字符串中,该怎么办?您只能创建新对象。
https://zhuanlan.zhihu.com/p/65628607
https://www.bilibili.com/read/cv12268169
http://www.javashuo.com/article/p-kmrdipqc-rh.html
https://juejin.cn/post/6844903842723659789Heading-6
https://www.cnblogs.com/xiaofuge/p/13689485.html