从here清楚可见,Java中包含String
的实际字符实际上存储在private final char value[];
字符数组中。
有人可以帮助我理解表达式String text = "Hello World";
String
字面的地方。如果是这样的话,String对象和String字面值之间究竟有什么区别,因为两者都必须由char[]
支持Runtime Constant Pool
内的Method Area
中? char[] value
仅在堆上创建。因此,当使用intern()
运算符创建的String
对象调用new
方法时,将复制到 StringPool (假设它不是字符数组)? 编辑:
如上所述here,StringPool实现为HashMap。那么什么可能是同样的关键和价值?看起来该值不能是char[] value
,因为在堆上创建了相同的值。
答案 0 :(得分:1)
没有专家,但我会试一试。
String text = "Hello World";
lcd(加载常量)查找常量池表中的字符串。发现#2的地址为“Hello Word”,位于#14
参考:What is the purpose of the Java Constant Pool?
参考:https://www.ibm.com/developerworks/library/it-haggar_bytecode/#opcode