1. String 与 StringBuilder
- 在进行拼接时,StringBuilder 的运行时间只有 String 的1‰,因为 String 内容不可变长度固定,String 的拼接其实是创建新的 String 对象,再把拼接后的内容赋值给新的对象,在频繁修改的情况下会频繁创建对象;而 StringBuilder 在 append 时并不是用 String 存储,而是放到一个 value 的 char 数组中,用数组来扩容,这样就不需要创建对象了,从头到尾只有一个实例对象;
2. StringBuilder 与 StringBuffer
- StringBuffer 是线程安全的,即保证同步;
- StringBuilder 提供一个与 StringBuffer 兼容的 API,但不保证同步,也就是说 StringBuilder 线程不安全;
- StringBuilder 常用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单线程使用时,因为它比 StringBuffer 快;
- 当字符串缓冲区被多个线程使用时,JVM 不能保证 StringBuilder 的操作是安全的,但可以保证 StringBuffer 是正确操作;
3. 选择的总结
- 操作较少数据时,推荐使用 String;
- 操作大量数据,且单线程时,推荐使用 StringBuilder;
- 操作大量数据,且多线程时,推荐使用 StringBuffer;