掌握 String.concat() 方法的基本语法与使用方式
理解其与 + 操作符在字符串拼接中的区别
能够处理 NullPointerException 异常场景
了解 concat() 在实际编程(如字符串反转)中的应用
concat() 是 String 类的一个实例方法,用于将一个字符串追加到当前字符串的末尾,并返回一个新的拼接后的字符串。
⚠️ 注意:由于
String是不可变的,concat()不会修改原字符串,而是创建并返回一个新对象。
public String concat(String str)str:要追加到当前字符串末尾的字符串(不能为 null)
拼接后的新字符串(this + str)
NullPointerException:当传入的参数 str 为 null 时抛出
public class CoderHub {
public static void main(String[] args) {
String s = "Code";
s = s.concat("Master"); // 必须重新赋值才能保留结果
System.out.println(s); // 输出:CodeMaster
}
}🔔 关键点:若不将返回值赋给变量,拼接结果会丢失!
String prefix = "Data";
String suffix = "Structure";
String result = prefix.concat(suffix);
System.out.println(result); // DataStructurepublic class CoderHub {
public static void main(String[] args) {
String part1 = "Web-";
String part2 = "Development-";
String part3 = "Guide";
String temp = part1.concat(part2); // Web-Development-
String full = temp.concat(part3); // Web-Development-Guide
System.out.println(full);
}
}输出:
Web-Development-Guide💡 提示:虽然可以链式调用(如
s1.concat(s2).concat(s3)),但可读性较差,建议分步或使用StringBuilder。
如果传入 null 作为参数,concat() 会抛出 NullPointerException。
public class CoderHub {
public static void main(String[] args) {
String a = "Hello";
String b = null;
String c = a.concat(b); // ❌ 抛出 NullPointerException
}
}运行结果:
Exception in thread "main" java.lang.NullPointerExceptionString safeConcat(String base, String append) {
if (append == null) {
return base; // 或 return base + "null"; 视需求而定
}
return base.concat(append);
}✅ 最佳实践:在不确定参数是否为
null时,优先使用+操作符或Objects.toString()配合StringBuilder。
String name = "Alice";
String score = null;
// 使用 +
System.out.println(name + score); // Alicenull
// 使用 concat()
// System.out.println(name.concat(score)); // ❌ 报错!📌 建议:
已知非空且追求微性能 → 用
concat()通用场景、含可能
null值 → 用+或StringBuilder
虽然不推荐(效率低),但可通过 concat() 实现字符串反转,加深对字符串不可变性的理解。
public class ReverseString {
public static void main(String[] args) {
String original = "Coder";
String reversed = "";
// 从后往前遍历每个字符
for (int i = original.length() - 1; i >= 0; i--) {
char ch = original.charAt(i);
String charStr = Character.toString(ch);
reversed = reversed.concat(charStr); // 每次创建新字符串!
}
System.out.println("Original: " + original);
System.out.println("Reversed: " + reversed);
}
}输出:
Original: Coder
Reversed: redoC⚠️ 性能警告:此方法时间复杂度为 O(n²),因每次
concat()都复制整个字符串。✅ 高效替代方案:使用
StringBuilder.reverse()。
拼接两个已知非空的字符串
代码风格要求避免 +(如某些编码规范)
微优化场景(但收益极小)
拼接超过两个字符串
循环中拼接(应使用 StringBuilder)
参数可能为 null
// 单线程动态拼接
StringBuilder sb = new StringBuilder();
sb.append("A").append("B").append("C");
String result = sb.toString();
// 多字符串格式化
String msg = String.format("%s-%s-%d", "User", "Login", 2025);concat() 是安全、明确的两字符串拼接方法
不改变原字符串,必须接收返回值
不接受 null,否则抛出 NullPointerException
在简单、确定非空的场景下可用,但不适用于复杂拼接
理解其底层机制有助于深入掌握 Java 字符串的不可变特性
为什么 concat() 方法只接受 String 类型参数,而 + 操作符可以拼接任意类型?
在以下代码中,共创建了多少个字符串对象?
String s = "A";
s = s.concat("B");
s = s.concat("C");如果你需要拼接一个用户列表(如 "user1, user2, user3"),使用 concat() 是否合适?请说明理由并给出更优方案。