Java String 核心机制与常用 API 实战
String 类是 Java 开发中最基础也最重要的类之一。理解它的底层机制和常用方法,能避免很多潜在的 Bug,并写出更高效的代码。
一、String 类的底层机制
1. 类的定义与特性
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
// ...
}
- final:String 类不能被继承,确保其不可变性和安全性。
- Serializable:实现了序列化接口,对象可以通过网络或流传输。
- Comparable:支持字符串之间的比较操作。
2. 内部存储结构
private final char value[];
value 数组用于存储字符数据。final 修饰符保证了数组引用一旦初始化就不能指向其他地址,这是 String 不可变性的核心基础。
3. 字符串常量池 (String Table)
字符串常量通常存储在字符串常量池中。池中不允许存在两个相同的字符串对象。需要注意的是,不同 JDK 版本中常量池的具体存放位置可能有所不同(如 JDK 7 在堆,JDK 8 在元空间)。
4. 不可变性详解
String 的不可变性意味着一旦创建,内容就不能被修改。这带来了线程安全和缓存优化的好处,但也带来了一些性能考量:
- 重新赋值:需要重新分配内存地址。
- 拼接操作:每次拼接都会创建新的对象。
- 替换操作:调用
replace等方法也会返回新对象,而非原地修改。
public void testImmutability() {
String s1 = "hello";
String s2 = "hello";
// 引用相同,因为都指向常量池中的同一个对象
System.out.println(s1 == s2); // true
s2 = "hi"; // 重新赋值,s2 指向新对象
s2 += ;
System.out.println(s1);
System.out.println(s2);
}
{
;
;
s2.replace(, );
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
}


