news 2026/9/3 3:12:42

String Constant Pool

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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); // true String 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 后常量池移至堆内存,拼接字符串的编译期 / 运行期处理逻辑不同,需注意引用对比的差异。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 1:00:28

AI对IT从业者的影响分析

AI在IT领域的应用现状列举当前AI在编程、测试、运维、数据分析等IT细分领域的实际应用案例,如GitHub Copilot、自动化测试工具、智能运维系统等。AI替代IT工作的可能性分析AI在重复性任务(如代码生成、故障排查)中的优势,以及在创…

作者头像 李华
网站建设 2026/9/2 22:54:40

Langchain-Chatchat结合Superset实现数据看板展示

Langchain-Chatchat 与 Superset 融合:构建企业级知识洞察看板 在现代企业中,信息爆炸与知识沉睡并存。一边是堆积如山的PDF、Word文档和内部手册,另一边却是员工反复询问“报销流程怎么走”“年假如何申请”。传统的文档管理系统依赖关键词…

作者头像 李华
网站建设 2026/9/2 12:08:44

计算机毕业设计springboot宁马旅游网设计与实现 基于Spring Boot的宁马旅游信息管理平台开发与应用 Spring Boot框架下宁马旅游管理系统的设计与实现研究

计算机毕业设计springboot宁马旅游网设计与实现766r59(配套有源码 程序 mysql数据库 论文)本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着信息技术的飞速发展,传统的旅游管理模式已经难以满足现代用户…

作者头像 李华
网站建设 2026/9/2 4:00:32

2025年产品经理生存指南:从被优化到升值的5大核心能力

2025年产品经理正经历深刻职业变革,AI重构生产力,降本增效成为主旋律。纯执行型PM被淘汰,具备AI原生思维、商业化能力、全栈技能、数据驱动和长期主义的PM反而升值。文章系统解析五大生存法则:AI工具应用与工作流重构、商业模式设…

作者头像 李华
网站建设 2026/9/2 16:52:59

企业如何正确挑选源代码加密方案?

本文将为您彻底梳理思路,看完不再迷茫。源代码开发环境复杂,涉及开发工具多样、文件格式繁多,如何选择一款既能全面防护又不影响开发效率的加密软件?这是众多企业IT负责人与管理者面临的共同难题。目前市场上的源代码加密方案主要…

作者头像 李华
网站建设 2026/9/2 11:28:25

Langchain-Chatchat能否实现自动问答热点统计?

Langchain-Chatchat能否实现自动问答热点统计? 在企业级智能问答系统日益普及的今天,一个核心问题逐渐浮现:我们是否只能满足于“问一句答一句”的被动响应?还是可以更进一步,让系统主动告诉我们——员工最关心什么&am…

作者头像 李华