在 Java 中处理字符串时,String的不可变性常会导致频繁创建对象,影响效率。为此,Java 提供了StringBuilder和StringJoiner两个工具类,专门用于高效处理字符串拼接、修改等操作。
一、StringBuilder:可变字符串容器
StringBuilder可视为一个 "可变字符串缓冲区",其内容可动态修改,避免了String拼接时的性能损耗。
核心特性:
- 内容可变,修改时不会创建新对象
- 线程不安全(单线程场景性能更优)
- 适合频繁修改、拼接字符串的场景
常用方法:
-
构造方法:
// 空参构造 StringBuilder sb1 = new StringBuilder(); // 基于初始字符串创建 StringBuilder sb2 = new StringBuilder("abc"); -
添加元素:
append(任意类型)
支持链式调用,直接在原有对象上添加内容:sb2.append("def").append(123).append(true); // 结果:"abcdef123true" -
反转内容:
reverse()
直接反转容器内的字符串:sb2.reverse(); // 结果:"eurt321fedcba" -
转换为 String:
toString()
最终需转为String类型时使用:String result = sb2.toString();
二、StringJoiner:优雅的字符串拼接工具
StringJoiner是 JDK 8 新增的类,专为多元素拼接设计,尤其适合需要统一间隔符、前缀和后缀的场景。
核心特性:
- 简化带间隔符的拼接逻辑
- 支持统一添加前缀和后缀
- 本质基于
StringBuilder实现,兼具效率
常用方法:
-
构造方法:
// 指定间隔符 StringJoiner sj1 = new StringJoiner(","); // 指定间隔符、前缀、后缀 StringJoiner sj2 = new StringJoiner(",", "(", ")"); -
添加元素:
add(内容)
同样支持链式调用:sj1.add("a").add("b").add("c"); // 结果:"a,b,c" sj2.add("x").add("y").add("z"); // 结果:"(x,y,z)" -
长度与转换:
length()获取总长度,toString()返回拼接结果(与StringBuilder用法一致)。
三、如何选择?
- StringBuilder:适合复杂的字符串修改(如插入、删除、反转),单线程场景首选。
- StringJoiner:适合简单的多元素拼接(如集合转字符串),代码更简洁直观。
- 两者最终都需通过
toString()转为String对象使用。
实际开发中,根据场景灵活选用这两个工具类,既能提升性能,又能简化代码,避免手动拼接字符串的繁琐与低效。
68

被折叠的 条评论
为什么被折叠?



