在Java中,实现字符串拼接有多种方法,具体选择取决于性能需求、代码可读性及使用场景。以下是常见拼接方式及其特点:
1. + 操作符2. String.concat() 方法- 示例:String str1 = "Hello";String str2 = "World";String result = str1.concat(" ").concat(str2); // 结果为 "Hello World"
- 优点:
比+操作符稍高效,避免了部分编译器优化开销。
- 缺点:
仍会创建新String对象,不适合大量拼接。
3. StringBuilder 或 StringBuffer 类- 示例:StringBuilder sb = new StringBuilder(); // 非线程安全// StringBuffer sb = new StringBuffer(); // 线程安全sb.append("Hello");sb.append(" ");sb.append("World");String result = sb.toString(); // 结果为 "Hello World"
- 优点:
内部使用可变字符数组,避免频繁创建新对象,性能高,尤其适合循环中拼接。
StringBuilder非线程安全但更快;StringBuffer线程安全但性能稍低。
- 缺点:
代码稍复杂,需手动调用toString()转换结果。
4. String.join() 方法(Java 8+)- 示例:String[] words = {"Hello", "World"};String result = String.join(" ", words); // 结果为 "Hello World"
- 优点:
代码简洁,支持指定分隔符,适合拼接数组或集合。
- 缺点:
仅适用于字符串数组或Iterable对象。
5. String.format() 方法- 示例:String str1 = "Hello";String str2 = "World";String result = String.format("%s %s", str1, str2); // 结果为 "Hello World"
- 优点:
支持复杂格式化(如数字、日期等)。
- 缺点:
性能较低,不适合高频拼接。
选择建议- 少量拼接:优先用+操作符或concat(),简单直观。
- 循环中大量拼接:必须用StringBuilder或StringBuffer,避免性能问题。
- Java 8+带分隔符拼接:String.join()是最佳选择。
- 需要格式化:使用String.format(),但需注意性能。
处理空指针异常(NullPointerException)拼接时若字符串为null,可能抛出异常。可通过以下方式避免:
- 手动检查null:String str1 = "Hello";String str2 = null;String result = (str1 != null ? str1 : "") + " " + (str2 != null ? str2 : ""); // 结果为 "Hello "
- 使用Objects.toString():import java.util.Objects;String result = str1 + " " + Objects.toString(str2, ""); // 结果为 "Hello "Objects.toString(object, default)在object为null时返回default值。
其他注意事项- 编码问题:处理用户输入或文件读写时,需确保字符串编码一致(如UTF-8),避免乱码。
- 可读性与维护性:选择清晰易懂的拼接方式,避免过度优化导致代码难以维护。
通过合理选择拼接方法,可以兼顾性能与代码质量,满足不同场景需求。