受到关于这个问题的评论的启发,我很确定Java String是在运行时而不是编译时间实现的 - 当然,事实上可以在不同的时间编译类,但在运行时仍然会指向相同的引用.
我似乎无法找到任何证据支持这一点.谁能证明这一点?
Jon*_*eet 17
优化发生在(或至少可能发生)两个地方:
String在JVM中只创建一个对象,但这是一个明显的优化.这实际上不是实际内容 - 只是不断优化.(我有一个模糊的回忆,Java 7围绕"小jar文件"的一部分工作包括整个jar文件的单个字符串池......但我可能是非常错误的.)
编辑:JVM规范的第5.1节,"运行时常量池"详细介绍了这个:
为了派生字符串文字,Java虚拟机检查CONSTANT_String_info结构给出的字符序列.
如果先前在类String的实例上调用了String.intern方法,该类包含与CONSTANT_String_info结构给出的Unicode字符序列相同的Unicode字符序列,则字符串文字派生的结果是对类String的同一实例的引用.
否则,将创建一个类String的新实例,其中包含CONSTANT_String_info结构给出的Unicode字符序列; 该类实例是字符串文字派生的结果.最后,调用新String实例的intern方法.
| 归档时间: |
|
| 查看次数: |
2164 次 |
| 最近记录: |