Skip to content
基础

一句话答案

String 不可变每次拼接创建新对象,StringBuilder 可变非线程安全(推荐),StringBuffer 可变线程安全(synchronized)。

核心要点
可变线程安全性能
String不可变安全(不可变)拼接慢(创建新对象)
StringBuilder可变不安全快(推荐)
StringBuffer可变安全(synchronized)较慢
追问与易错

追问方向:

  • String 拼接底层怎么实现的?(JDK8 用 StringBuilder,JDK9+ 用 invokedynamic + StringConcatFactory)
  • StringBuilder 初始容量是多少?(16,扩容为旧容量*2+2)
  • 什么场景下 String 拼接性能也可以?(编译期优化常量折叠)

易错点:

  • ❌ "循环中用 + 拼接没问题"——每次循环创建新 StringBuilder,应在循环外创建
  • ❌ "StringBuffer 比 StringBuilder 安全所以优先用"——大部分场景不需要线程安全

💡 记忆锚点

String是石碑刻字(不可变,每次改都刻新碑),StringBuilder是白板写字(可变、快、单人用),StringBuffer是加了锁的白板(可变、稍慢、多人用)。循环拼接别用石碑,用白板。