1. String
字符串常量,字符串长度不可变。Java 中 String 是 immutable(不可变)的。
2. StringBuffer
1.如果要频繁对字符串内容进行修改,出于效率考虑最好使用 StringBuffer,如果想转成 String 类型,可以调用 StringBuffer 的 toString() 方法。
2.线程安全的可变字符序列。在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。可将字符串缓冲区安全地用于多个线程。
3.主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。
append
方法始终将这些字符添加到缓冲区的末端;
insert
方法则在指定的点添加字符。
常用方法:
1. public StringBuffer append(String s)
将指定的字符串追加到此字符序列。
2. public StringBuffer reverse()
将此字符序列用其反转形式取代。
3. public delete(int start, int end)
移除此序列的子字符串中的字符。
4. public insert(int offset, int i)
将 int 参数的字符串表示形式插入此序列中。
5. insert(int offset, String str)
将 str 参数的字符串插入此序列中。
6. replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。
public class Test1 {
public static void main(String[] args) {
StringBuffer a = new StringBuffer("hello");
a.append("world");
System.out.println(a);
a.insert(5,",");
System.out.println(a);
}
}
helloworld
hello,world
3. StringBuilder
1.字符串变量(非线程安全)。在内部,StringBuilder 对象被当作是一个包含字符序列的变长数组。
2.StringBuilder 是一个可变的字符序列,是 JDK5.0 新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
public class Test1 {
public static void main(String[] args) {
StringBuilder a = new StringBuilder();
a.append("hello");
a.append("world");
System.out.println(a);
a.insert(5,",");
System.out.println(a);
}
}
helloworld
hello,world
4. 区别
-
String字符串长度不可变
-
StringBuffer和StringBuilder可变
两者区别:
1.在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。2.StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
3.由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。