Java中向字符串添加单个字符:str+'c'与str+"c"哪种方式更快?
Java中字符串拼接:
str+"c" vs str+'c' 性能对比 先直接给结论:在绝大多数业务场景下,两者的性能差异可以忽略不计,但从底层实现逻辑来看,str+'c'会有极其细微的效率优势。
底层实现的核心差异
当你编写str + "c"时,Java编译器会自动将其转换为以下代码:
new StringBuilder(str).append("c").toString()
而str + 'c'则会被转换为:
new StringBuilder(str).append('c').toString()
两者的关键区别在于StringBuilder.append的调用逻辑:
append(String)需要先解析传入的字符串对象,取出其内部的字符数组,再将数组内容复制到StringBuilder的缓冲区中——哪怕是单个字符的字符串(比如"c"),这个对象解析和数组复制的步骤也无法省略。append(char)则直接将单个字符写入缓冲区,不需要额外的对象解析操作,执行步骤更简洁。
JDK的编译与运行时优化
JDK的编译器和JVM会做大量优化来缩小两者的差距:
- 如果拼接的是常量字符串(比如
"abc" + "c"),编译器会直接在编译阶段生成拼接后的完整字符串,完全不会用到StringBuilder。但如果str是变量,这个优化就不适用。 - JVM的即时编译器(JIT)会对频繁调用的代码进行内联、缓存等优化,
append(char)和append(String)的细微差异会被进一步抹平。
实际开发建议
除非你在编写极端高频的循环代码(比如每秒执行数百万次拼接),否则完全不需要纠结这两者的性能差异。代码的可读性和语义清晰度更重要:如果要拼接的是单个字符,用str + 'c'更直观;如果是字符串常量,用str + "c"也完全没问题。
内容的提问来源于stack exchange,提问作者Shringe_
相关产品推荐
相关产品推荐

