String 类是不可变类,即一旦一个 String 对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。
Java 提供了两个可变字符串类 StringBuffer
和 StringBuilder
,中文翻译为“字符串缓冲区”。
StringBuilder
类代表可变字符串对象。实际上,两者功能基本相似,方法也差不多。不同的是,StringBuffer
是线程安全的,而 StringBuilder
则没有实现线程安全功能,所以性能略高。因此在通常情况下,如果需要创建一个内容可变的字符串对象,则应该优先考虑使用StringBuilder
类。
StringBuffer
、StringBuilder
、String
中都实现了 CharSequence 接口。CharSequence 是一个定义字符串操作的接口,它只包括 length()、charAt(int index)、subSequence(int start, int end) 这几个 API。
StringBuffer
、StringBuilder
、String
对 CharSequence 接口的实现过程不一样,如图
String 是 Java 中基础重要的类,被声明为 final class,是不可变字符串。
StringBuffer
提供了 append
和 add
方法,可以将字符串添加到已有序列的末尾或指定位置,它的本质是一个可修改的字符序列。
StringBuilder
和 StringBuffer
本质上没什么区别,就是去掉了保证线程安全的那部分,减少了开销。
一般情况下,速度从快到慢为 StringBuilder > StringBuffer > String,是相对的,不是绝对的。