# | String | StringBuilder | StringBuffer |
---|
是否可变 | 不可变 | 可变 | 可变 |
性能 | 最差 | 最好 | 中等 |
线程安全 | 安全 | 不安全 | 安全 |
如何保证String不可变
- 保存字符串的数组被 final 修饰且为私有的,并且String 类没有提供/暴露修改这个字符串的方法。
- String 类被 final修饰导致其不能被继承,进而避免了子类破坏 String 不可变。
不可变好处
- String 不可变,可以保证它的哈希码也不会被改变。有利于使用HashMap
- 线程安全性,不会被其他线程修改
- 节省空间,提高效率(字符串常量池)
不可变坏处
添加新对象时,会创建一个新对象,从而导致性能低下。