Java中字符串拼接的常用方法详解

 更新时间:2026年06月14日 08:38:59   作者:程序员黑豆  
这篇文章主要为大家详细介绍了Java中字符串拼接的常用方法,包括包括StringBuilder、StringBuffer和String.concat(),感兴趣的小伙伴可以了解下

字符串基本概念

Java 中的字符串由 java.lang.String 类表示,是不可变(immutable)对象 —— 一旦创建,其内容不可修改。每次对字符串的"修改"操作(如拼接、截取)都会产生新的 String 对象。

不可变性的意义

  1. 字符串常量池的基础 — 不可变才敢让多个引用共享同一对象
  2. 线程安全 — 天然可在多线程间共享
  3. 安全性 — 例如数据库连接字符串不会被意外篡改
  4. 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字符串拼接内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java设计模式--七大原则详解

    java设计模式--七大原则详解

    本篇文章主要对Java中的设计模式如,创建型模式、结构型模式和行为型模式以及7大原则进行了归纳整理,需要的朋友可以参考下,希望能给你带来帮助
    2021-07-07
  • MyBatis-Plus与PageHelper依赖的jsqlparser库冲突

    MyBatis-Plus与PageHelper依赖的jsqlparser库冲突

    在升级SpringBoot到3.x版本的同时,升级MyBatis-Plus后发现PageHelper无法使用,原因是MyBatis-Plus和PageHelper都依赖jsqlparser库,且PageHelper要求特定版本的jsqlparser,解决方法是在项目中排除这两个库的jsqlparser依赖,直接引用jsqlparser4.7版本
    2024-10-10
  • Java实现多文件上传功能

    Java实现多文件上传功能

    这篇文章主要为大家详细介绍了Java实现多文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • SpringBoot处理死信队列的方法详解

    SpringBoot处理死信队列的方法详解

    在项目开发中,消息队列是重要的组件,而死信队列作为处理异常消息的关键机制,直接影响系统的稳定性和可靠性,下面我们就来看看四种死信队列处理方式吧
    2025-06-06
  • SpringCloud协同开发实现方法浅析

    SpringCloud协同开发实现方法浅析

    好几个人同时开发同一个服务上的不同模块,导致你需要调试的接口总是被路由到别人的服务上,非常影响调试的效率,而且人越多越难受,总是请求不到自己的服务,这篇文章主要介绍了SpringCloud协同开发实现方法
    2022-12-12
  • Mybatis逆向工程时失败问题及解决

    Mybatis逆向工程时失败问题及解决

    这篇文章主要介绍了Mybatis逆向工程时失败问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 基于SpringBoot实现七天免登录的完整流程

    基于SpringBoot实现七天免登录的完整流程

    作为一名Java后端高级开发,我敢说七天免登录是业务系统里最常见的需求之一,这个需求看似简单,但实现不好很容易踩坑:要么免登录失效影响用户体验,要么出现安全漏洞导致账号被盗,今天这篇文章,我就结合实际工作经验,讲透七天免登录的标准实现方案
    2026-01-01
  • Java 轮询锁使用时遇到问题解决方案

    Java 轮询锁使用时遇到问题解决方案

    这篇文章主要介绍了Java 轮询锁使用时遇到问题解决方案,当我们遇到死锁之后,除了可以手动重启程序解决之外,还可以考虑使用顺序锁和轮询锁,但是过程也会遇到一些问题,接下来我们一起进入下面文章了解解决方案,需要的小伙伴可以参考一下
    2022-05-05
  • 基于java中的null类型---有关null的9件事

    基于java中的null类型---有关null的9件事

    这篇文章主要介绍了java中的null类型---有关null的9件事,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java中JSONObject与JSONArray的使用示例小结

    Java中JSONObject与JSONArray的使用示例小结

    JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包,本文给大家介绍Java中JSONObject与JSONArray的使用示例小结,感兴趣的朋友一起看看吧
    2025-02-02

最新评论