Java中字符串拼接的常用方法详解
字符串基本概念
Java 中的字符串由 java.lang.String 类表示,是不可变(immutable)对象 —— 一旦创建,其内容不可修改。每次对字符串的"修改"操作(如拼接、截取)都会产生新的 String 对象。
不可变性的意义
- 字符串常量池的基础 — 不可变才敢让多个引用共享同一对象
- 线程安全 — 天然可在多线程间共享
- 安全性 — 例如数据库连接字符串不会被意外篡改
- hashCode 缓存 — 只需计算一次,提高 HashMap 等的效率
字符串的创建
使用双引号包裹字符串内容:
String s1 = "Hello";
使用 String 类的构造方法:
String s2 = new String("Hello");
Java字符串常用 API
| 方法 | 说明 |
|---|---|
length() | 获取长度 |
charAt(int) | 获取指定索引字符 |
substring(int, int) | 截取子串 |
equals(Object) | 比较内容 |
indexOf(String) | 查找子串位置 |
trim() | 去除首尾空白 |
toUpperCase() | 转大写 |
split(String) | 按规则分割 |
Java字符串拼接
1.+运算符
最常用的拼接方式,简洁直观:
String s = "Hello" + " " + "World"; String name = "Java"; String greeting = "Hello, " + name + "!";
底层原理:编译器会自动将其优化为 StringBuilder 操作(JDK 9 起改为 StringConcatFactory 动态生成拼接字节码),所以单行拼接性能不是问题。
陷阱:循环中用 + 拼接,每次循环都会创建新的 StringBuilder,产生大量临时对象:
// 反例 ❌ — 循环中用 +
String result = "";
for (int i = 0; i < 10000; i++) {
result += i; // 每次循环都 new StringBuilder,极低效
}
// 正例 ✅ — 循环中用 StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb.append(i);
}
String result = sb.toString();
2. StringBuilder / StringBuffer
| 类 | 线程安全 | 性能 | 适用场景 |
|---|---|---|---|
StringBuilder | 否 | 快 | 单线程,绝大多数场景 |
StringBuffer | 是 | 稍慢 | 多线程需要同步时 |
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(" ").append("World");
String result = sb.toString();
可以预分配容量以减少扩容开销:
StringBuilder sb = new StringBuilder(1024); // 预估大小,避免频繁扩容
3. String.concat()
String s = "Hello".concat(" ").concat("World");
- 内部直接创建
char[]并复制,比+在少量拼接时更高效 - 适合确定只有两个字符串拼接的场景
4. String.join()
JDK 8 引入,适合用分隔符拼接多个字符串:
String result = String.join(", ", "Java", "Python", "Go");
// → "Java, Python, Go"
// 拼接集合
List<String> list = List.of("a", "b", "c");
String joined = String.join("-", list); // "a-b-c"
5. String.format()
适合需要格式化输出的场景:
String s = String.format("姓名:%s,年龄:%d", "张三", 25);
// → "姓名:张三,年龄:25"
总结
| 方式 | 适用场景 | 性能 |
|---|---|---|
+ | 单行少量拼接 | ✅ 编译器优化后良好 |
StringBuilder | 循环或大量拼接 | ✅ 最佳 |
StringBuffer | 多线程大量拼接 | ✅ 略慢于 Builder |
concat() | 两个字符串拼接 | ✅ 良好 |
String.join() | 分隔符拼接 | ✅ 良好 |
String.format() | 格式化拼接 | ⚠️ 较慢,胜在可读性 |
核心原则:单行拼接用 +,频繁拼接字符串时,优先使用 StringBuilder(非线程安全)或 StringBuffer(线程安全),避免产生大量中间 String 对象。
到此这篇关于Java中字符串拼接的常用方法详解的文章就介绍到这了,更多相关Java字符串拼接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
MyBatis-Plus与PageHelper依赖的jsqlparser库冲突
在升级SpringBoot到3.x版本的同时,升级MyBatis-Plus后发现PageHelper无法使用,原因是MyBatis-Plus和PageHelper都依赖jsqlparser库,且PageHelper要求特定版本的jsqlparser,解决方法是在项目中排除这两个库的jsqlparser依赖,直接引用jsqlparser4.7版本2024-10-10
Java中JSONObject与JSONArray的使用示例小结
JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包,本文给大家介绍Java中JSONObject与JSONArray的使用示例小结,感兴趣的朋友一起看看吧2025-02-02


最新评论