一、String类
1. 概述
在 Java 中,String 类用于表示字符串。String 对象是不可变的,即一旦创建,其内容不能被修改。每次对 String 对象进行修改操作时,实际上是创建了一个新的 String 对象。
2. 特点
- 不可变性:
String对象的不可变性使得它在多线程环境下是线程安全的,因为不存在多个线程同时修改一个String对象的情况。 - 常量池:Java 为了提高性能和减少内存开销,引入了字符串常量池。当创建一个
String对象时,如果常量池中已经存在相同内容的字符串,则直接返回常量池中的引用;否则,在常量池中创建一个新的字符串对象。
3. 示例代码
public class StringExample {
public static void main(String[] args) {
// 直接赋值,会先检查常量池
String str1 = "Hello";
String str2 = "Hello";
// 使用 new 关键字创建,会在堆中创建新对象
String str3 = new String("Hello");
System.out.println(str1 == str2); // true,因为指向常量池中的同一个对象
System.out.println(str1 == str3); // false,str3 是堆中的新对象
System.out.println(str1.equals(str3)); // true,equals 方法比较内容
// 字符串拼接会创建新对象
String str4 = str1 + " World";
System.out.println(str4);
}
}
4. 常用方法
length():返回字符串的长度。charAt(int index):返回指定索引位置的字符。equals(Object obj):比较两个字符串的内容是否相等。substring(int beginIndex, int endIndex):返回从beginIndex到endIndex - 1的子字符串。concat(String str):将指定的字符串连接到该字符串的末尾。
二、StringBuilder类
1. 概述
StringBuilder 是一个可变的字符序列,它提供了动态修改字符串内容的功能。StringBuilder 是非线程安全的,适用于单线程环境下的字符串操作。
2. 特点
- 可变性:可以通过调用
append()、insert()、delete()等方法对字符串内容进行修改,而不会创建新的对象,提高了性能。 - 高效性:在频繁进行字符串拼接等操作时,使用
StringBuilder比使用String更高效,因为避免了大量的对象创建和垃圾回收。
3. 示例代码
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
// 追加字符串
sb.append(" World");
// 插入字符串
sb.insert(5, " Java");
// 删除指定范围的字符
sb.delete(5, 10);
System.out.println(sb.toString());
}
}
4. 常用方法
append(String str):将指定的字符串追加到当前StringBuilder对象的末尾。insert(int offset, String str):在指定的位置插入指定的字符串。delete(int start, int end):删除从start到end - 1的字符。reverse():反转当前StringBuilder对象中的字符序列。
三、StringBuffer类
1. 概述
StringBuffer 也是一个可变的字符序列,它和 StringBuilder 类似,但 StringBuffer 是线程安全的,适用于多线程环境下的字符串操作。
2. 特点
- 线程安全:
StringBuffer的方法大多使用了synchronized关键字进行同步,保证了在多线程环境下的线程安全。 - 性能较低:由于使用了同步机制,
StringBuffer的性能相对StringBuilder较低,因为同步操作会带来一定的开销。
3. 示例代码
public class StringBufferExample {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("Hello");
// 追加字符串
sb.append(" World");
// 插入字符串
sb.insert(5, " Java");
// 删除指定范围的字符
sb.delete(5, 10);
System.out.println(sb.toString());
}
}
4. 常用方法
StringBuffer 的常用方法和 StringBuilder 基本相同,如 append()、insert()、delete()、reverse() 等。
四、三者的使用场景总结
- String:当字符串内容不需要频繁修改,或者在多线程环境下对字符串进行只读操作时,使用
String类。 - StringBuilder:在单线程环境下,需要频繁对字符串进行修改操作时,使用
StringBuilder类,因为它的性能较高。 - StringBuffer:在多线程环境下,需要频繁对字符串进行修改操作时,使用
StringBuffer类,以保证线程安全。
993

被折叠的 条评论
为什么被折叠?



