java字符串反转推荐使用stringbuilder.reverse()方法,因其简洁高效、性能最优;其次可选字符数组双指针原地交换,体现算法思维;递归和stream api虽可行但性能较差,不适用于生产环境。

掌握核心思路,别只记API
面试官常会问:“为什么用 StringBuilder 而不是 StringBuffer?”、“如果要求原地反转,该怎么做?”——这说明光会写 new StringBuilder(s).reverse().toString() 是不够的。
- 明白 String 不可变:每次拼接都生成新对象,用
s.charAt(i) + reverse这类方式时间复杂度是 O(n²),要能解释清楚 - 区分 StringBuilder(非线程安全、快) 和 StringBuffer(线程安全、稍慢),单线程场景默认选前者
- 知道“原地反转”针对的是
char[],而非String,因为 String 本身无法修改
手写至少三种实现,并能对比优劣
建议在白板或编辑器里不查资料默写以下三种(不用全背,但要能推导):
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- StringBuilder.reverse():最简洁,O(n) 时间 + O(n) 空间,适合日常开发
- 双指针交换 char 数组:体现算法思维,O(n) 时间 + O(n) 空间(char数组拷贝),能说出如何避免临时变量(如异或或简单引入 temp)
- 倒序遍历拼接(用 StringBuilder.append):逻辑清晰易懂,O(n) 时间 + O(n) 空间,比字符串拼接高效得多
主动覆盖边界和异常情况
很多候选人只测 "abc",但面试加分点往往藏在细节里:
- 输入为 null 怎么办?(应先判空,抛
NullPointerException或返回 null/空串,需说明理由) - 输入是空字符串
""或单字符,是否仍正确? - 含中文、emoji、代理对(surrogate pair)的字符串,
charAt()是否安全?(提示:推荐用codePointAt()+Character.isBmpCodePoint()处理 Unicode 安全反转)
延伸一两个进阶点,展现思考深度
当基础回答完成后,可自然带出一两点延伸,不求全,但求准确:
- 递归实现虽然简洁,但栈空间开销大,长度超过千级可能 StackOverflowError
- Java 8 Stream 写法(如
chars().mapToObj(...).reduce(...))可读性差、性能低,仅作了解,不建议生产使用 - 如果面试官追问“如何反转每个单词但保持单词顺序?”,能立刻反应出:先按空格分割,再逐个反转,最后拼接
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










