在 Java 中,String 被设计成放入“常量池(String Pool / 常量池)”,主要是出于性能、内存节省和设计语义三方面的考虑。下面分层说明。
String a = "abc";
String b = "abc";
Java 的 String 对象一旦创建就不能修改内容。
因为不可变,所以:
➡ 这就为“字符串复用”提供了前提条件。
String a = new String("abc");
String b = new String("abc");
如果没有常量池:
String a = "abc";
String b = "abc";
a == b 为 true"abc" 对象✅ 节省内存
✅ 提升比较效率(== 可用)
String s = "hello";
"hello" 在 编译期 就被放入 class 文件的常量池这是 JVM 层面的优化机制。
String a = "abc";
✅ 优先从常量池取
✅ 没有才创建
String b = new String("abc");
"abc",也会顺带创建✅ 可用 intern() 手动入池:
b = b.intern();
因为 String 具备:
| 特性 | 说明 |
|---|---|
| 不可变 | 可安全共享 |
| 高频使用 | 几乎所有程序都用 |
| 可预测 | 编译期可知内容 |
其他对象一般不满足这些。
Java 把 String 放入常量池,是因为 String 不可变、使用频繁,通过池化可以大幅减少内存占用并提升性能。
如果你愿意,我也可以从 JVM 内存结构 / intern 原理 / 面试角度 再展开讲。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。