Java中String是不可变的引用类型,创建方式包括字面量(复用常量池)、new关键字(堆中新建)及其他构造方式;常用操作均返回新字符串,比较用equals();拼接推荐+(少量)或StringBuilder(大量);支持文本块与基本类型互转。
Java 中 String 是最常用、最基础的类之一,它表示不可变的字符序列。虽然用起来像基本类型(比如可以直接用双引号赋值),但它其实是引用类型,属于 java.lang 包下的
final 类。
常见创建方式有三种,区别在于是否复用常量池:
String s = "hello"; → JVM 优先检查字符串常量池,存在则直接引用,否则新建并放入池中String s = new String("hello"); → 总是新建堆内存对象,不自动入池(除非显式调用 intern())new String(char[])、new String(byte[])、String.valueOf(...),适合从数组或数字等转换大部分方法返回新字符串(因为 String 不可变),原字符串不受影响:
length()、charAt(i)、indexOf("x")、contains("abc")
equals()(比较内容),== 只比较引用地址(除非都是字面量且相同)substring(start, end)、toUpperCase()、trim()、replace("old", "new")
split("regex") 返回字符串数组;String.join("-", list) 或 str1 + str2(编译器会优化为 StringBuilder)循环中频繁拼接字符串时,避免用 +(尤其在老版本 JDK 中会反复创建对象):
+ 完全没问题,JDK 8+ 已优化为 StringBuilderStringBuilder(单线程)或 StringBuffer(线程安全)更高效"""..."""),适合多行字符串,自动处理缩进和换行常用互转方法要记牢,注意异常处理:
Integer.parseInt("123")(抛 NumberFormatException)、Double.parseDouble("3.14")
String.valueOf(123)(推荐,可处理 null)、Integer.toString(123)、或直接 "" + 123
String.format("%d %.2f", 42, 3.1415) 或 System.out.printf(...)
基本上就这些。String 看似简单,但涉及常量池、不可变性、编码、正则匹配等细节时容易踩坑。用熟核心方法,理解“不可变”这个前提,就能避开大多数问题。