stringbuilder.reverse() 可原地反转字符串,无需手动循环,因其实现基于双指针交换字符数组元素,时间复杂度 o(n),但需注意它修改原实例、不返回新对象,且不处理 null。

直接用 StringBuilder.reverse() 就行,它原地反转、不需手动循环,但必须注意:它只作用于当前实例,不会创建新字符串。
为什么 StringBuilder.reverse() 能不写循环?
因为它是 JDK 内置方法,底层用双指针在字符数组上交换位置,时间复杂度 O(n),封装了所有迭代逻辑。你调一次就完事,不用碰 i、length、charAt 这些。
-
reverse()修改的是当前StringBuilder对象的内容,不是返回新对象 - 如果原字符串是
String类型,得先构造StringBuilder,再调用reverse(),最后用toString()拿结果 - 空字符串或
null输入要自己判,StringBuilder不处理null
典型用法和常见错误
正确写法长这样:
String original = "hello"; String reversed = new StringBuilder(original).reverse().toString();
容易出错的地方:
- 漏掉
toString()→ 得到的是StringBuilder实例,不是String - 复用同一个
StringBuilder实例多次调用reverse()→ 第二次会把第一次反转的结果再翻回去 - 传入
null给构造函数 → 抛NullPointerException,得提前检查
reverse() 和手动循环比有啥实际差别?
除了少写几行,关键差异在可读性和边界处理:
- 手动循环容易错写成
i (应为 <code>),而 <code>reverse()没这风险 - 它自动处理 surrogate pair(如 emoji),手动遍历时若用
char会切开 UTF-16 高低代理,导致乱码 - 性能几乎没差别,但
reverse()更少出 bug —— 尤其当字符串含中文、emoji 或控制字符时
真正要注意的不是“怎么调用”,而是别忘了 toString(),以及别把它当成纯函数去用:它真真切切地改了原 StringBuilder 的内容。










