相关类图
String | StringBuilder | StringBuffer | |
线程是否安全 | 不可变 | append方法线程不安全 | append方法线程安全 |
拼接是否扩容 | 每次有效拼接都会扩容 | 遵从AbstractStringBuilder扩容机制 | 遵从AbstractStringBuilder扩容机制 |
拼接方法入参 | concat方法入参只能为String | append方法入参可以是Object | append方法入参可以是Object |
构造方法 | 不能指定char[]长度 | 可以指定char[]长度 | 可以指定char[]长度 |
能否比较大小 | 可以比较大小 | 没实现Comparable接口,不能比较大小 | 不能比较大小 |
toString方法 | toStringCache缓存 |
JDK8 +操作是通过构建一个StringBuilder对象,调用对象的append方法实现
AbstractStringBuilder的append方法扩容机制
- 一次追加长度超过当前容量,则会按照当前容量×2+2扩容一次
- 一次追加长度不仅超过初始容量,而且按照当前容量×2+2 扩容一次也不够,其容量会直接扩容到与所添加的字符串长度相等的长度
字符串长度在10万量级下,String.concat方法、StringBuilder.append方法、StringBuffer.append方法性能差别不大