String是不可变序列,每次修改生成新对象,适用于固定字符串;StringBuilder是可变序列,支持高效拼接,适用于频繁修改场景。

String 和 StringBuilder 是 Java 中处理字符串的两个核心类,它们在性能、使用场景和内部机制上有显著区别。理解它们的核心概念有助于编写高效且正确的代码。
String:不可变字符序列
String 表示一个不可变的字符序列。一旦创建,其内容无法更改。
-
• 每次对 String 进行拼接或修改操作(如 +=),都会生成一个新的 String 对象。
• String 对象存储在字符串常量池中(如果使用字面量创建),有助于节省内存和提高性能。
• 由于不可变性,String 是线程安全的,适合用作 HashMap 的键等场景。
• 频繁修改字符串时使用 String 会导致大量临时对象,影响性能。
示例:
String s = "Hello";
立即学习“Java免费学习笔记(深入)”;
s += " World"; // 实际上创建了新对象
StringBuilder:可变字符序列
StringBuilder 表示一个可变的字符序列,用于高效地构建或修改字符串。
-
• 支持在原对象基础上追加、插入、删除字符,不会频繁创建新对象。
• 提供 append()、insert()、delete()、reverse() 等方法,操作灵活。
• 不是线程安全的,适用于单线程环境下的字符串拼接。
• 在循环中拼接字符串时,使用 StringBuilder 可显著提升性能。
示例:
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" World"); // 在原对象上操作
String result = sb.toString();
选择建议
根据使用场景合理选择:
-
• 字符串内容固定或极少变化 —— 使用 String。
• 需要频繁拼接、修改字符串(如循环中)—— 使用 StringBuilder。
• 多线程环境下需要可变字符串 —— 考虑 StringBuffer(StringBuilder 的线程安全版本)。
基本上就这些。掌握 String 的不可变性和 StringBuilder 的可变性,能帮助你在实际开发中写出更高效的字符串处理代码。










