java8基础知识--字符串

张开发
2026/4/3 16:41:17 15 分钟阅读
java8基础知识--字符串
Java 字符串String核心知识点总结JDK8一、String 基础特性String 是 final 类不可被继承底层由final char[]存储JDK9 改为 byte[]。不可变性字符串一旦创建内容无法修改。所有修改操作截取、替换、拼接都会返回新字符串。好处线程安全、常量池复用、哈希值固定。二、字符串常量池String Pool位置JDK8 中位于堆内存中。作用缓存字符串字面量实现对象复用节省内存。核心规则相同内容的字符串常量池中只存一份。使用字面量创建的字符串自动进入常量池。三、三种创建方式的内存区别1. 字面量创建推荐Stringshello;先查常量池存在直接复用不存在则创建。只在常量池创建 1 个对象。2. new String 创建StringsnewString(hello);常量池中创建/复用hello。堆中创建新的 String 对象。共创建 2 个对象堆1个 常量池1个。3. 字符串拼接常量 常量a b编译期直接优化为ab存入常量池。变量 变量/常量a b底层优化为newStringBuilder().append(a).append(b).toString()最终在堆中创建新对象不进入常量池。四、intern() 方法详解1. 作用手动将字符串加入常量池并返回常量池中的对象引用。2. 执行逻辑去常量池查找相同内容的字符串。存在 →直接返回常量池对象。不存在 →将当前对象的引用存入常量池再返回。3. 关键点不会删除/移动原堆对象。原对象无引用时由 GC 自动回收。目的实现字符串复用节省内存可用快速比较。五、 和 equals() 区别基本类型比较值。引用类型String比较内存地址。equals()String 重写了该方法比较字符串内容。开发规范字符串比较必须用 equals()常量池复用可用但不推荐。六、经典内存面试题题1Strings1abc;Strings2abc;// s1 s2 → true常量池复用同一对象题2Strings1newString(abc);Strings2newString(abc);// s1 s2 → false两个不同堆对象题3Strings1ab;Strings2ab;Strings3s1b;// s1 s2 → true编译优化// s1 s3 → falses3 在堆中题4Strings1newString(hello);Strings2s1.intern();Strings3hello;// s1 s2 → false// s2 s3 → true七、核心总结必背String 不可变修改返回新对象。字面量存常量池new String()存堆内存。变量拼接底层用StringBuilder结果在堆。intern()手动入池返回常量池对象不删除原对象。字符串比较用equals()地址比较用。

更多文章