news 2026/6/10 4:06:22

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/6/10 7:50:08

Langchain-Chatchat能否实现自动问答满意度调查?

Langchain-Chatchat 能否实现自动问答满意度调查? 在企业智能化转型的浪潮中,越来越多组织开始部署基于大语言模型(LLM)的知识助手,以提升内部信息获取效率。然而,一个常被忽视的问题浮出水面:我…

作者头像 李华
网站建设 2026/6/9 23:52:20

23、Windows 8系统问题预防与解决实用指南

Windows 8系统问题预防与解决实用指南 在使用Windows 8系统时,预防问题的发生是确保安全、愉快计算体验的重要部分。下面将详细介绍一些实用的工具和方法,帮助你保持系统稳定、数据安全。 1. 利用Windows Update保持系统更新 保持系统更新对于确保系统安全和无故障运行至关…

作者头像 李华
网站建设 2026/6/10 12:26:00

29、Windows 8 使用技巧与故障排除指南

Windows 8 使用技巧与故障排除指南 1. 手动磁盘碎片整理 在 Windows 8 系统中,默认情况下每周会自动对除固态硬盘(SSD)之外的所有内部磁盘驱动器以及已连接的外部驱动器(如 U 盘或外部硬盘)进行一次碎片整理。由于固态硬盘的技术特性,碎片整理不仅会降低其使用寿命,还…

作者头像 李华
网站建设 2026/6/10 13:35:49

数琨创享:以全面质量数据管理驱动制造企业高质量发展

01困境:质量数据管理的核心痛点在制造业、医药、食品、电子等行业的质量管控体系中,质量数据是洞察产品缺陷、优化生产流程、规避经营风险的 “核心密码”。但传统管理模式下,企业普遍面临一些质量数据管理难题,主要体现为① 数据…

作者头像 李华
网站建设 2026/6/10 10:48:08

Langchain-Chatchat支持知识库操作历史回溯吗?

Langchain-Chatchat 支持知识库操作历史回溯吗? 在企业级 AI 应用日益深入的今天,一个智能问答系统是否“可审计”“可追溯”,往往比它能回答得多聪明更重要。尤其是在金融、医疗、法律等行业,每一次文档上传、删除或查询行为都可…

作者头像 李华
网站建设 2026/6/3 1:00:10

计算机毕业设计springboot旅游景点综合服务系统 基于Spring Boot框架的旅游景点一站式服务平台设计与实现 Spring Boot驱动的旅游景点综合管理系统开发

计算机毕业设计springboot旅游景点综合服务系统n867p9 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着信息技术的飞速发展,旅游业作为全球经济的重要组成部分&am…

作者头像 李华