jdk1.7中,常量池在java堆,可以存放字符串对象或者对象的引用,jdk1.6中,常量池在方法区中,可以存放字符串对象,不存放引用。
String a=new String("11");
String b="11";
System.out.println(a.intern()==b);//true
System.out.println(a==b);//false
String temp = "hh";
String s1 = "a" + temp;//会在堆上创建对象,会在常量池中生成"ahh"字符串对象
String s2 = "ahh";//指向常量池中的对象
System.out.println(s1 == s2);//false
String a=new String("11")+new String("a");
//常量池创建"11"和"a"字符串常量,在堆上创建"11a"字符串常量
a.intern();//在常量池上创建指向堆"11a"字符串常量的引用
String b="11a";//b指向对上对象"11a"
System.out.println(a.intern()==b);//true
System.out.println(a==b);//true