今天在刷编程题的时候遇到了关于StringBuffer的内容,平时经常使用String类,但都没有仔细研究过String、StringBuffer和StringBuilder。下面将这三个类在Java的API文档中的一些重点内容摘抄下来:
String类
- final关键字修饰,它们的值在创建后不可修改
- 字符串是常量
- 字符串缓冲区支持可变字符串
由于String类的不可变,所以它可以共享。例如:
String str = "abc";
等效于:
char data[] = {'a', 'b', 'c'}; String str = new String(data);
Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder
(或 StringBuffer
)类及其 append
方法实现的。字符串转换是通过 toString
方法实现的,该方法由 Object
类定义,并可被 Java 中的所有类继承。
StringBuffer类
- 线程安全的可变字符串序列,类似于
String
的字符串缓冲区,但不能修改 - 主要操作是
append
和insert
方法,可重载这些方法,以接受任意类型的数据 - 当发生与源序列有关的操作(如源序列中的追加或插入操作)时,该类只在执行此操作的字符串缓冲区上而不是在源上实现同步
StringBuilder类
从 JDK 5 开始,为StringBuffer补充了一个单个线程使用的等价类,即 StringBuilder
。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
- 一个可变的字符序列
- 此类提供一个与
StringBuffer
兼容的 API,但不保证同步 - 用在字符串缓冲区被单个线程使用的时候
- 线程不安全的,如果需要多个线程使用时,建议用StringBuffer