Java:使用新String()时,stringpool对象和堆对象之间的连接

时间:2015-04-27 16:13:04

标签: java string immutability

我知道在新的String(“Hi”)的情况下,它将在堆中创建两个对象,而在stringpool中创建另一个对象。我很好奇这两个对象是否共享任何链接,如果是,那么如何?

1 个答案:

答案 0 :(得分:0)

new String(“hi”)。它将Hi存储在字符串常量池中,引用将传递给引用此对象的String变量。

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String string=new String("Hi");     
}
Traces for the above program.

TraceEntry

Entry : programIt/stringval.main([Ljava/lang/String;)V Bytecode static method

Entry : java/lang/String.<init>(Ljava/lang/String;)V Bytecode method, This = 0xfffb93c0

Entry : java/lang/Object.<init>()V Compiled method, This = 0xfffb93c0

Exit : java/lang/Object.<init>()V Compiled method

Exit : java/lang/String.<init>(Ljava/lang/String;)V Bytecode method

Exit : programIt/stringval.main([Ljava/lang/String;)V Bytecode static method

它只有一个字符串Entry和Exit,这显然意味着它有一个引用。如果有2个参考,那么就会有 为2个引用提供2个内部String调用。