1 String
String 是字符串常量,由final修饰,不可变,即一旦一个 String 对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁。由于String是不可变的,自然就不存在线程安全问题。
String 对象在进行字符串拼接时,因为字符串的不可变性,String 对象会每次拼接,都会复制一个副本出来进行运算,而本身的串仍然留在内存中,大量的临时片段会造成不可忽视的性能损耗。所以在进行大量的字符串拼接时建议使用 StringBuilder 或 StringBuffer。
2 StringBuilder & StringBuffer
StringBuffer 类则代表一个字符序列可变的字符串,可以通过 append、insert、reverse、setChartAt、setLength 等方法改变其内容。一旦生成了最终的字符串,调用 toString 方法将其转变为 String。JDK1.5 新增了一个 StringBuilder 类,两者的区别是:
StringBuffer与StringBuilder中的方法和功能完全是等价的。- 只是
StringBuffer中的方法大都采用了synchronized关键字进行修饰,因此是线程安全的,而StringBuilder没有这个修饰,可以被认为是线程不安全的。 - 在单线程程序下,
StringBuilder效率更高,因为它不需要加锁,不具备多线程安全而StringBuffer则每次都需要判断锁,效率相对更低。
3 总结
| String | StringBuffer | StringBuilder | |
|---|---|---|---|
| 执行速度 | 慢 | 中 | 快 |
| 线程安全 | 是 | 是 | 否 |
| 使用场景 | 少量字符串操作 | 多线程环境下的大量操作 | 单线程环境下的大量操作 |
728

被折叠的 条评论
为什么被折叠?



