Skip to content

Java 字符串

字符串不可变性

Java 中的字符串是不可变的(immutable),即一旦创建,字符串对象的内容就不能被修改。每当对字符串进行任何操作(如拼接、替换、截取等)时,都会创建一个新的字符串对象,而不会改变原有的字符串。 这种不可变性保证了字符串的安全性和线程安全,但频繁的字符串操作会导致大量新对象的创建,影响性能。

字符串常量池

Java 中的字符串常量池(String Constant Pool)是一个特殊的内存区域,用于存储字符串字面量。它的主要目的是为了节省内存和提高性能

NOTE

字符串字面量自动进入常量池. 在 Java 中,字符串字面量在编译时就会自动被放入字符串常量池

字符串常量折叠

编译器会在编译期间自动计算和合并字符串常量表达式。

java
// 编译后,`s` 实际上就是 `"helloworld"`,而不是运行时才拼接。
String s = "hello" + "world";

NOTE

只有全部参与拼接的部分都是常量时,才会发生折叠。

字符串常量传播

如果一个字符串变量的值在编译期已知,编译器会直接用常量替换变量引用。

java
final String a = "foo";
String b = a + "bar"; // 编译期优化为 "foobar"

String a = "foo";
String b = a + "bar"; // 运行时拼接

Released under the MIT License.