Java字符串面试核心是理清脉络:不可变性与内存模型、创建方式与对象归属、常见方法边界逻辑;辅以对比表格、字节码分析和动手验证,重在理解推导而非死记硬背。

别硬背,先理清脉络再记关键点。Java 字符串看似简单,但面试常考底层机制、性能陷阱和易错细节,死记答案容易翻车。
抓住三类核心问题
面试中 90% 的字符串题围绕这三块展开:
- 不可变性与内存模型:String 为什么不可变?String、StringBuilder、StringBuffer 的区别本质是什么?intern() 方法在不同 JDK 版本下行为为何不同?
- 创建方式与对象归属:new String("abc") 创建几个对象?"abc" + "def" 和 "abc".concat("def") 哪个走常量池?编译期优化(如 final 修饰的字符串拼接)如何影响字节码?
- 常见方法的边界逻辑:substring() 在 JDK 6 和 JDK 7+ 实现差异(是否共享 char[]);equals() 为什么先判 null 再判 == 再判长度再逐字符?isEmpty() 和 length() == 0 是否完全等价?
用对比表格代替零散记忆
把易混点列成小表,一眼看清差异:
- String vs StringBuilder vs StringBuffer:线程安全?可变性?适用场景(如循环内拼接用 StringBuilder,多线程用 StringBuffer)
- == vs equals():前者比引用地址(常用于 intern 后比较),后者比内容(注意 null 安全写法)
- String.valueOf() vs toString():前者对 null 返回 "null",后者对 null 调用会抛 NullPointerException
结合字节码和 JVM 常量池理解
光记结论不够,面试官爱追问“为什么”。比如问到 new String("ab") + "c" 是否在常量池中:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 先看编译阶段:"ab" 和 "c" 是字面量,进常量池;但 new String("ab") 在堆上新建对象
- 运行时拼接结果是新 StringBuilder.append().toString(),结果在堆上,不在常量池
- 只有显式调用 intern() 才可能将堆中字符串引用加入常量池(JDK 7+ 后常量池移到堆中)
动手验证比默背更牢
每个知识点配一行验证代码,运行后观察结果:
- System.out.println("a" + "b" == "ab"); // true(编译期优化)
- String s1 = new String("ab"); System.out.println(s1.intern() == "ab"); // JDK 7+ true
- String s = "hello"; s.concat(" world"); System.out.println(s); // 还是 "hello"(不可变)
不复杂但容易忽略。真正掌握不是记住答案,而是能推导出答案的过程。

















