class A {
String s = "abc";
}
class B {
String s = "abc";
static public void main(String[]args ) {
A a = new A();
B b = new B();
System.out.println("a.s==b.s : " + (a.s==b.s));
}
}
输出:
a.s==b.s : true
如果将文字写入类文件的“常量池”部分,那么为什么2个类中的2个文字(相同的内容)使用相同的插入字符串?编译器如何将它们链接在一起?
最佳答案
有一个字符串池,所有插入的String
对象都可以放入其中。实际上是一个HashMap<String>
。注意,String.intern()
方法返回一个String
;实现本质上是
if (stringPool.contains(this))
return stringPool.get(this);
else {
stringPool.put(this, this);
return this;
}
当在加载类时创建String对象时,它会被调用
intern()
的结果所代替,该结果导致在所有类之间共享类似实例的结果。