字符串内存模型 - java6

时间:2018-04-11 15:59:51

标签: java string memory-management

here清楚可见,Java中包含String的实际字符实际上存储在private final char value[];字符数组中。

有人可以帮助我理解表达式String text = "Hello World";

的以下问题
  1. 实际存储在 StringPool 中的内容是什么?我读过很多名为String字面的地方。如果是这样的话,String对象和String字面值之间究竟有什么区别,因为两者都必须由char[]支持
  2. 如果String引用标记为Constant(final),它是否也会存储在Runtime Constant Pool内的Method Area中?
  3. 如上所述here,实际的char[] value仅在堆上创建。因此,当使用intern()运算符创建的String对象调用new方法时,将复制到 StringPool (假设它不是字符数组)?
  4. 编辑:

    如上所述here,StringPool实现为HashMap。那么什么可能是同样的关键和价值?看起来该值不能是char[] value,因为在堆上创建了相同的值。

1 个答案:

答案 0 :(得分:1)

没有专家,但我会试一试。

String text = "Hello World";

enter image description here

enter image description here

lcd(加载常量)查找常量池表中的字符串。发现#2的地址为“Hello Word”,位于#14

参考:What is the purpose of the Java Constant Pool?

参考:https://www.ibm.com/developerworks/library/it-haggar_bytecode/#opcode

相关问题