Java String 类核心机制与常用方法
在 Java 开发中,String 是最常用的类之一。理解它的底层机制和常用 API,能帮助我们写出更健壮、高效的代码。
String 类底层理解
类的声明与特性
String 类被声明为 final,这意味着它不能被继承。同时它实现了 Serializable 接口以便序列化传输,以及 Comparable 接口支持大小比较。
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
// ...
}
内部属性与常量池
String 的核心数据存储在 private final char[] value 数组中。一旦初始化,这个数组的地址就不可变,这也是 String 不可变性的基础。所有的字符串常量都存储在字符串常量池(StringTable)中,该池在不同 JDK 版本中的存放位置有所差异。
不可变性与实例化
当对字符串变量重新赋值或进行拼接时,实际上是在堆空间中开辟新空间保存新字符串,而不是原地修改。
public void testImmutability() {
String s1 = "hello";
String s2 = "hello";
s2 = "hi";
s2 += "world";
System.out.println(s1); // 输出 hello,未被修改
}
实例化主要有两种方式:字面量直接赋值和 new 关键字。前者会优先检查常量池,后者则强制在堆中创建新对象。
public void testInstantiation() {
String s1 = "hello";
String s2 = "hello";
String s3 = ();
();
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s1.equals(s2));
}


