String对象的创建及intern()方法
String s = new String("abc");
这条语句创建了2个对象,第一个对象是“abc”字符串存储在常量池中,第二个对象在JAVA Heap中的 String 对象。
String s3 = new String("1") + new String("1");
这条语句创建4个对象,JAVA Heap中,两个值为“1”的 String 对象,一个值为“11”的 String 对象,还有就是常量池中的“1”字符串。
jdk7 中常量池不在 Perm 区域(属于方法区),而在堆区。调用 intern() 时,常量池中不需要再存储一份对象了,可以直接存储堆中的引用。
因此 s1.intern() 返回的可能是堆区中的一个对象的引用,而不一定是常量池中的一个对象了。