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