Java字符串反转最常用且高效的方式是使用StringBuilder的reverse()方法,因其基于可变字符数组、双指针原地交换,时间复杂度O(n),避免String不可变导致的频繁对象创建。

Java中字符串反转最常用且高效的方式是借助StringBuilder,因为它内部基于可变字符数组,避免了字符串不可变带来的频繁对象创建开销。
为什么用StringBuilder而不是String?
String在Java中是不可变的,每次拼接或修改都会生成新对象,反转操作若用循环+拼接,时间与空间复杂度都较高;而StringBuilder是可变的,提供reverse()方法,底层通过双指针交换字符,时间复杂度O(n),无需额外字符串对象。
一行代码完成反转(推荐)
直接调用内置方法,简洁安全:
String original = "Hello";
String reversed = new StringBuilder(original).reverse().toString();
// 结果:"olleH"
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 构造时传入原字符串,自动复制内容到内部char数组
-
reverse()就地翻转,不新建缓冲区 - 最后调用
toString()生成新的String实例(这是必须的,因为结果需返回不可变字符串)
手动实现逻辑(理解原理用)
如果想了解reverse()内部怎么工作,可以模拟双指针交换:
String s = "Java";
char[] chars = s.toCharArray();
int left = 0, right = chars.length - 1;
while (left char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++; right--;
}
String reversed = new String(chars); // "avaJ"
- 适用于学习算法或特殊需求(如只反转某段子串)
- 注意:不能直接对String调用
setCharAt(),必须转为char数组或用StringBuilder
处理null和空字符串(健壮性建议)
实际项目中应增加判空保护,避免NPE:
public static String reverse(String str) {
if (str == null || str.isEmpty()) {
return str;
}
return new StringBuilder(str).reverse().toString();
}
-
str == null时直接返回null,符合多数工具类习惯(如Apache Commons Lang的StringUtils.reverse()) -
str.isEmpty()包含空字符串""和长度为0的情况

















