我知道JVM维护字符串字面量池来提高性能并维护JVM内存,并学习了字符串字面量的维护方式。但是我想澄清与字符串池和在堆上创建的字符串对象相关的一些内容。
如果我的解释有误,请指出。
String s = "abc";
如果上述代码行被执行,那么如果字符串字面量在池中不存在,则将其添加到字符串池中。此外,在堆上创建了一个字符串对象,并且引用 s
将指向池中的字面量。问题:
- 每次执行此代码时,它是否都会在堆上创建字符串对象?
- 字符串字面量池只维护字符串字面量还是也维护字符串对象?
- JVM 何时决定将字符串字面量添加到字符串池中?它是在编译时还是运行时决定的?
谢谢。
String.intern
。(规范) - T.J. Crowder