笔者经常忘记三者之间的区别,下面自己总结一番,画一个表格来展示
Item | "+"区别 | 多线程 | 性能 | 使用场景 | 优化 |
---|---|---|---|---|---|
String | 不可变类,重新创建字符串 | 不安全 | 拼接时,性能差 | 操作少量数据,字符串不变时 | 无 |
StringBuilder | 可变类,原字符串基础上生成字符串 | 不安全 | 性能最好(比StringBuffer高10%-15%) | 单线程操作大量数据(方法内部,用完回收) | 尽可能指定容量(默认:16,不超过16个字符不用指定),不指定显著降低性能 |
StringBuffer | 可变类,原字符串基础上生成字符串 | 安全 | 性能好 | 主要用在全局变量中,多线程下安全 | 同上 |
在现实的模块化编程中,负责某一模块的程序员不一定能清晰的判断该模块是否会放入多线程的环境中运行,除非确定系统的瓶颈是在StringBuffer上,并且确定你的模块不会运行在多线程模式下,才可以采用StringBuilder,否则还是用StringBuffer