java中字符串的操作可能用到String、StringBuffer和StringBuilder这三个类,那他们有什么区别呢?分别有哪些适用场景?本文将一一论述。
String
Java 官方文档中将 String 类对象称为不可变字符串,不可变的优点是编译器可以让字符串共享。 但是这也造成,对String类型对象的修改将会创建新的对象,效率极其低下。而Java 的设计者认为共享带来的高效率远远胜过于提取 、 拼接等修改字符串操作所带来的低效率。所以String适用于“少修改,多比较”的场景。如果需要对字符串做大量的修改操作,建议使用StringBuilder或StringBuffer类。
StringBuffer
StringBuffer是高效的、线程安全的字符串操作类,建议在多线程的需求中使用StringBuffer。
从JDK源码中可以看出StringBuffer的append方法加了synchronized同步关键字,这也是其适用于多线程的原因。
StringBuilder
JDK5.0引入的StringBuilder类是高效的、线程不安全的字符串操作类,建议在单线程的需求中使用StringBuilder。
从JDK源码中可以看出StringBuilder的append方法没有加同步,这也是其线程不安全的原因。