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()的结果所代替,该结果导致在所有类之间共享类似实例的结果。

09-30 17:21
查看更多