字符串池是JVM堆中专存字面量字符串的区域,仅收录双引号创建的字符串以复用对象;new String()总在堆新建,intern()可将其加入池;JDK7起池位于堆内存,受GC管理;==比较地址,equals比较内容。

字符串池(String Pool)不是“缓存”,也不是“工具类”,它是JVM在堆内存中维护的一块专用区域,专门用来收留字面量字符串,目标就一个:避免重复对象、节省内存、加速比较。
只有用 "abc" 这种方式定义的字符串,才会被自动检查并放入池中。比如:
String a = "hello"; → JVM查池,无则新建,有则复用,a 指向池中对象
String b = "hello"; → 再次查池,发现已有,b 和 a 指向同一地址 → a == b 为 trueString c = new String("hello"); → 先确保池里有"hello",再强制在堆里新建一个String实例,c 指向堆中对象,不等于 a 或 bnew String(...) 总是在堆中新建对象,跟池无关。但调用 .intern() 就像递上一张通行证:
new String("abc").intern() == "abc" 一定为 true从 JDK7 开始,字符串池就移到了堆内存(不是方法区、不是元空间)。这意味着:
立即学习“Java免费学习笔记(深入)”;
这是池机制最直接的体现:
"x" == "x" → true(同在池,同一地址)new String("x") == new String("x") → false(两个堆对象,地址不同)new String("x").equals(new String("x")) → true(内容一样)基本上就这些。理解池的关键不在背规则,而在记住:池只认字面量;new 总是堆里新造;intern 是手动“归档”操作;== 只有在双方都来自池时才安全。
以上就是Java里如何理解字符串池_字符串池机制解析的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号