Java字符串核心考点有三:常量池工作原理(决定==比较结果)、不可变性(所有修改操作均创建新对象)、String与StringBuilder/StringBuffer的选型(可变性与线程安全二维对比)。

别硬背,重点抓逻辑和对比关系。Java字符串考题看起来多,其实核心就三块:常量池怎么工作、不可变性带来什么影响、String和StringBuilder/StringBuffer怎么选。掌握这三点,90%的题都能推出来。
字符串常量池是解题钥匙
所有“==”和“equals”结果差异,根源都在常量池是否命中。
- 字面量赋值(String s = "abc")→ 先查常量池,有就复用,没就新建并放入
- new String("abc") → 一定在堆新建对象,常量池里已有也照建不误
- 编译期确定的拼接(如 "a"+"b")→ JVM直接优化成字面量,进常量池
- 运行期拼接(如 "a"+new String("b"))→ 结果在堆,不进常量池
不可变性不是概念,是行为结果
记住一句话:任何看似修改的操作,都返回新对象,原对象不变。
- s += "x" → 底层是 new StringBuilder().append().toString(),生成新String
- s.substring()、s.replace()、s.concat() 全部同理
- 正因为不可变,才能安全当HashMap的key、用作类加载器参数、作为URL或路径——改不了才可靠
String、StringBuilder、StringBuffer 三者只比两点
不用记方法列表,盯住两个维度就行:
立即学习“Java免费学习笔记(深入)”;
- 可变性:String不可变;StringBuilder和StringBuffer都可变(内部char[]可改)
- 线程安全:StringBuffer加了synchronized,适合多线程场景;StringBuilder无锁,单线程性能更好
- 转换规则很简单:String → StringBuilder用构造或append;StringBuilder → String调toString()
真正难的题,比如“new String(“ab”) + new String(“c”) 创建几个对象”,本质是在考你能不能分清:常量池里有没有、new执行几次、+操作符底层用的谁(StringBuilder)、最终结果放哪(堆)。一层层拆开,比死记答案管用得多。


















