Java基础:深入理解String、StringBuilder与StringBuffer

举报
Brian-Tony 发表于 2026/10/26 09:11:58 2026/10/26
【摘要】 Java基础:深入理解String、StringBuilder与StringBuffer在Java日常开发中,字符串处理几乎无处不在。很多新手开发者在使用字符串时,往往习惯性地直接使用String进行拼接,却不知道这在某些场景下会带来性能隐患。今天我们就来聊聊Java中这三个“长得像”但性格迥异的类。 1. String:不可变的“高冷”对象String是我们最熟悉的类,但它有一个核心特性...

Java基础:深入理解String、StringBuilder与StringBuffer

在Java日常开发中,字符串处理几乎无处不在。很多新手开发者在使用字符串时,往往习惯性地直接使用String进行拼接,却不知道这在某些场景下会带来性能隐患。今天我们就来聊聊Java中这三个“长得像”但性格迥异的类。

1. String:不可变的“高冷”对象

String是我们最熟悉的类,但它有一个核心特性:不可变性(Immutable)。一旦一个String对象被创建,它的内容就无法被改变。

当你执行以下代码时:

String s = "Hello";
s = s + " World";

实际上,JVM并没有修改原来的"Hello"对象,而是在内存中创建了一个全新的对象"Hello World",并将引用指向它。原来的"Hello"对象如果没有被其他变量引用,就会等待垃圾回收。

适用场景:字符串不经常改变、作为HashMap的Key、多线程环境下的安全共享。

2. StringBuilder:灵活的“效率王”

为了解决String频繁拼接产生大量临时对象的问题,StringBuilder应运而生。它是可变的,可以直接在原有对象上进行修改,不会创建新的对象。

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
System.out.println(sb.toString()); // 输出: Hello World

StringBuilder的方法没有进行同步处理,因此它是线程不安全的,但也正因为如此,它的执行效率是三者中最高的。

适用场景:单线程环境下,大量的字符串拼接操作(如循环拼接SQL语句)。

3. StringBuffer:稳重的“安全卫士”

StringBuffer和StringBuilder非常相似,都是可变的字符序列。唯一的区别在于,StringBuffer的大部分方法都加了synchronized关键字。

这意味着它是线程安全的,但也因此带来了一定的性能损耗,速度通常比StringBuilder慢。

适用场景:多线程环境下,需要保证字符串操作线程安全的场景。

总结对比

特性 String StringBuilder StringBuffer
可变性 不可变 可变 可变
线程安全 安全 不安全 安全
性能 低(频繁修改时) 高 中
底层实现 final char[] (JDK8及以前) char[] char[]

一句话建议:

  • 操作少量数据用String。
  • 单线程大量操作用StringBuilder。
  • 多线程大量操作用StringBuffer。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。