回答
在 Java 中,String
、StringBuffer
和 StringBuilder
是处理字符串的三个核心类,他们的差异主要体现在不可变性、线程安全性和性能三个方面。
- 不可变性
String
是不可变的,即当我们新建一个 String
对象后,其底层数据是不会发生改变的,任何能够改变 String
的方法都是新建一个 String
对象,原对象不会发生改变。
StringBuffer
和 StringBuilder
都是可变的,意味着我们可以在原对象上对其进行修改操作。
- 线程安全性
由于 String
是不可变的,所以它天然具备线程安全。
StringBuffer
也是线程安全的,它的所有公共方法都使用了同步机制(synchronized
),意味着在多线程环境下,StringBuffer
是不会允许两个线程同时操作的。
StringBuilder
不是线程安全的,它和 StringBuffer
的实现机制其实是非常相似的,只不过 StringBuilder
没有对公共方法进行同步处理。