一个是你的Class被CLassLoader加载时,你的"abc"被作为常量读入,在constant pool里创建了一个共享的"abc"
然后,当调用到new String("abc")的时候,会在heap里创建这个new String("abc");
但是如果你把String s = new String("abc").intern();
那么具体过程变成,现在heap里创建一个String, 然后调用intern()方法,发现constant pool里存在'xyz',然后就会返回constant pool内对象的引用,稍后heap里的就not reachable了,会被gc,最终VM里只有一个"abc" |