Java字符串拼接:String、StringBuilder与StringBuffer终极指南
“哥们儿,有个循环拼字符串的地方,线上特别慢,帮忙看下?”
这种场景,你是不是也曾遇到过?一个看似无害的 + 号,就可能是拖垮你系统性能的元凶。在Java中,String、StringBuilder 和 StringBuffer 三者共存,绝不是多余设计,而是为了在不同场景下提供最优解。本文拒绝浅尝辄止,将带你深入JVM底层,从“不可变性”的根源聊起,彻底搞懂三者的本质区别,并为你献上“选择困难症”的终极解决方案。
一、问题的根源:String的“不变”之谜
我们先从最熟悉、最常用的String聊起。很多Java教程都会告诉你一个结论:String是不可变的(Immutable)。
这句话到底是什么意思呢?
- 根本原理:什么是不可变?
“不可变”指的是,一个String对象一旦在内存中被创建,它的值就再也无法被改变。当我们试图对一个String对象进行修改时,比如拼接、替换等,Java虚拟机(JVM)并不会在原来的内存地址上修改数据,而是会创建一个全新的String对象,用来存放修改后的结果。

我们来看一个最简单的例子:
String str = "你好";
str = str + ",世界!";
System.out.println(str); // 输出:你好,世界!
这段代码背后发生了什么?
- JVM在内存中创建了一个
String对象,值为"你好",并让引用str指向它。 - 执行
str + ",世界!"时,JVM又创建了另一个String对象,值为"你好,世界!"。 - 最后,将引用
str

最低0.47元/天 解锁文章
319

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



