JDK1.6及以前:
String s = new String("1");
s.intern();
在常量池中寻找常量“1”,
1.如果存在,则返回这个池中的字符串。
2.如果不存在,将s指向的堆上的对象“1”复制后存在常量池中,并返回池中“1”的一个引用。
即常量池中只可以存储 字符串。
JDK1.7及之后:
String s = new String("1");
s.intern();
在常量池中寻找“aaa”,
1.如果已经存在,则返回池中“1”这个对象。
2.如果不存在,在常量池中记录了首次出现的对象引用,引用指向堆。假设这个引用叫p,p与s指向了堆上同一个对象,即p = s。
即常量池可以存储 字符串和堆上的引用。