You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中修改字符串引用后,字符串常量池中的旧字符串会被移除吗?

关于Java字符串常量池中旧字符串的保留问题

先纠正你示例代码里的拼写错误,正确代码应该是:

String s1 = "hello";
s1 = "test";

结论很明确:字符串常量池中的"hello"不会被移除,原因如下:

  • 字符串常量池的核心作用是缓存字符串字面量,实现对象复用。一旦像"hello"这种字符串字面量被JVM加载到常量池中,常量池本身会持有该对象的引用,只要JVM没有退出,或者该字面量所属的类没有被卸载(这种场景非常少见),这个字符串就会一直留在常量池里。
  • 你提到的变量s1指向新对象,只是改变了变量的引用关系,并不会影响常量池里原字符串的引用状态。常量池对"hello"的引用依然存在,所以它不会被垃圾回收(GC)清理掉。

补充一点:如果是通过new String("hello")创建的堆对象,当没有引用指向它时会被GC回收,但常量池里的"hello"字面量依然会保留。

内容的提问来源于stack exchange,提问作者Limbarunda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 19:48:10