当前位置: 首页 > news >正文

String Constant Pool(字符串常量池)

一、核心概念(通俗解释)

可以把字符串常量池理解成一个「字符串缓存池」:
  • 当你创建字符串(比如 String s = "hello")时,JVM 会先去常量池里找有没有内容为 "hello" 的字符串。
  • 如果有,直接返回这个字符串的引用(相当于「复用」);如果没有,就先在常量池里创建 "hello",再返回引用。
  • 而通过 new String("hello") 创建的字符串,会在 堆内存 新建对象,同时常量池里也会创建 "hello"(如果之前没有),这也是为什么 new String 会比直接赋值多占用内存。

二、代码示例:直观理解常量池机制

java
 
运行
public class StringConstantPoolDemo {public static void main(String[] args) {// 方式1:直接赋值,字符串存入常量池,复用已有对象String s1 = "hello";String s2 = "hello";// 方式2:new 创建,堆内存新建对象,常量池仍会存"hello"(若不存在)String s3 = new String("hello");String s4 = new String("hello");// 对比引用(== 比较对象地址,equals 比较内容)System.out.println(s1 == s2);       // true:s1和s2指向常量池同一个"hello"System.out.println(s1 == s3);       // false:s1指向常量池,s3指向堆内存对象System.out.println(s3 == s4);       // false:s3和s4是堆里两个不同对象System.out.println(s1.equals(s3));  // true:内容相同// intern() 方法:将堆中的字符串对象"入池",返回常量池引用String s5 = s3.intern();System.out.println(s1 == s5);       // true:s5现在指向常量池的"hello"}
}
 

三、关键知识点

  1. 存储位置
    • JDK 1.6 及之前:常量池位于 方法区(永久代)
    • JDK 1.7 及之后:常量池被移到 堆内存(更灵活,避免永久代内存溢出)。
  2. 核心方法:intern ()
    • 作用:将当前字符串对象的内容存入常量池(若不存在),并返回常量池中的引用;
    • 场景:当需要复用动态生成的字符串(比如拼接后的字符串)时,用 intern() 可优化内存。
  3. 字符串拼接的特殊情况
    java
     
    运行
     
    String s1 = "a" + "b";  // 编译期优化,直接等同于"ab",存入常量池
    String s2 = "ab";
    System.out.println(s1 == s2);  // trueString a = "a";
    String b = "b";
    String s3 = a + b;  // 运行期拼接,会new String("ab"),存在堆中
    System.out.println(s3 == s2);  // false
    System.out.println(s3.intern() == s2);  // true
     

四、实际应用价值

  • 内存优化:避免大量重复字符串占用内存(比如业务中频繁使用的固定字符串,如 "success"、"fail");
  • 性能提升:复用已有对象减少 GC(垃圾回收)压力,字符串比较时 == 比 equals 更快(但仅适用于常量池字符串)。

总结

  1. 字符串常量池是 JVM 优化字符串内存的缓存机制,直接赋值的字符串会优先存入常量池并复用;
  2. new String() 会在堆创建新对象,可通过 intern() 方法将内容入池复用;
  3. JDK 1.7 后常量池移至堆内存,拼接字符串的编译期 / 运行期处理逻辑不同,需注意引用对比的差异。
http://www.jsqmd.com/news/112710/

相关文章:

  • 2025新中式服装定制地域特色与品牌排行,新中式服装哪家好色麦新中式满足多元需求 - 品牌推荐师
  • OceanBase 向量索引优化指南
  • 2025年目前好用的通风蝶阀产品推荐榜,除尘器花板/通风阀门/除尘器布袋/布袋除尘器/除尘器气包/通风蝶阀/除尘器骨架通风蝶阀订制厂家推荐 - 品牌推荐师
  • 股票搜索热度分析报告 - 2025-12-19 14:51:09
  • 2025年济南家具搬运公司联系方式汇总: 本地资深企业官方联系方式与一站式搬迁方案 - 十大品牌推荐
  • 2025年最新中式服装加盟五大品牌推荐榜单,中式服装加盟批发拿货精选实力品牌 - 品牌推荐师
  • 2025年新中式女装怎么选择?看这篇就够了,头部新中式女装需要多少钱技术引领与行业解决方案解析 - 品牌推荐师
  • 网络数据包监控与分析系统(一):需求梳理 - Triple
  • 【OS_Windows】sc queryex 命令来查看服务对应的进程
  • 技术派-项目亮点
  • 2025年市面上热门的星型卸料器订做厂家哪里有卖,星型卸料器/除尘器布袋/除尘器气包/电磁脉冲阀/通风阀门星型卸料器源头厂家排行榜单 - 品牌推荐师
  • 2025年年终深圳公司搬家推荐:专业服务榜单与全方位对比评测指南 - 十大品牌推荐
  • RHEL7 8 9 lvreduce lv
  • 拖车服务口碑排行榜TOP10,选对不踩坑!广东服务好的拖车平台技术实力与市场口碑领航者 - 品牌推荐师
  • python配置基础请求头以模拟浏览器
  • 2025年大连热门的表冷器设计推荐排行榜,工业暖风机/卡式风机盘管/新风换气机/表冷器/消防排烟风机/卧式暗装风机盘管/空气幕表冷器批发排行 - 品牌推荐师
  • 2025年成都排行前列的表冷器批发多少钱,工业暖风机/吊顶式空调机组/卡式风机盘管/空气幕/表冷器/卧式暗装风机盘管表冷器厂家有哪些 - 品牌推荐师
  • 01.从Powershell角度创建一个Windows计划任务都需要用到哪些cmdlet
  • Buildah 简明教程:让镜像构建更轻量,告别 Docker 依赖
  • AI Agent详解
  • 2025年年终北京搬家公司推荐:实力排行榜单与全方位服务对比评测 - 十大品牌推荐
  • ​人才为基,文化为魂:北京高瓴资投资管理有限公司的组织生命力之源 - 博客万
  • 2025年深圳靠谱的婚姻律所、口碑不错的婚姻律所排名推荐 - 工业推荐榜
  • 2025年年终济南公司搬家推荐:实力排行解析及关键维度对比 - 十大品牌推荐
  • 2025年最新盘点:国内领先的高温塑料回收企业TOP榜,高温塑料回收企业关键技术和产品信息全方位测评 - 品牌推荐师
  • 2025年膜盒压力表制造企业权威推荐榜单:数字压力表/隔膜压力表/防爆压力表源头厂家精选 - 品牌推荐官
  • 升级curl版本,及升级后引起的动态库链接不正常问题的解决
  • 回溯法
  • 【精选留言】公众号评论点赞自助业务是真的吗?文章评论点赞100条以上怎么弄? - 速递信息
  • 中医健康网网站声明 - 资讯焦点