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 14:31:07

Langchain-Chatchat如何实现知识库操作持续集成?

Langchain-Chatchat如何实现知识库操作持续集成? 在企业智能化转型的浪潮中,一个常被忽视但至关重要的问题浮出水面:如何让企业的私有知识像代码一样被高效管理与快速迭代? 传统做法是将制度文件、产品手册、技术文档存入共享盘或…

作者头像 李华
网站建设 2026/6/10 14:34:55

28、Windows 8 优化使用技巧全攻略

Windows 8 优化使用技巧全攻略 一、基础要点 1.1 显示器校准 即便显示器开箱即用,也建议进行校准,以保证显示效果达到最佳。 1.2 触摸操作 单指手势 :可以使用多种单指触摸手势来操作 Windows 8 系统,实现各种导航功能。 多指手势 :部分操作,如捏合等,需要使用多…

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

31、Windows 8 使用技巧与故障排除全攻略

Windows 8 使用技巧与故障排除全攻略 1. Windows 8 故障排除 当你的电脑运行不佳,或者遇到与操作系统文件缺失、第三方程序、恶意软件或难以修复的 Windows 相关问题时,可考虑刷新或重置电脑。 1.1 刷新电脑 刷新电脑会将 Windows 8 恢复到系统默认设置。此操作会保留用户…

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

Langchain-Chatchat能否支持Markdown语法高亮输出?

Langchain-Chatchat能否支持Markdown语法高亮输出? 在企业级AI应用日益普及的今天,如何在保障数据隐私的前提下,构建一个既智能又“好看”的本地问答系统,成了许多技术团队关注的核心问题。尤其是在开发、运维、技术支持等场景中&…

作者头像 李华
网站建设 2026/6/10 14:32:19

中国制造业的“高精尖”腹地,华东地区

华东地区,包括上海、江苏、浙江、安徽、山东等省市,是中国经济最为活跃、制造水平最高的区域之一,这里不仅经济体量大,更以产业集群化、技术高端化、配套完善化而闻名,可谓是“中国制造升级版”的核心引擎。1. 江苏&am…

作者头像 李华