1.只在常量池上创建常量
String a1 = "AA";
1
2.只在堆上创建对象
String a2 = new String("A") + new String("A");
1
3.在堆上创建对象,在常量池上创建常量
String a3 = new String("AA");
1
4.在堆上创建对象,在常量池上创建引用
String a4 = new String("A") + new String("A");//只在堆上创建对象AA
a4.intern();//将该对象AA的引用保存到常量池上
1
2
5.在堆上创建对象,在常量池上创建常量,在常量池上创建引用(不可能)
String a5 = new String("A") + new String("A");//只在堆上创建对象
a5.intern();//在常量池上创建引用
String a6 = "AA";//此时不会再在常量池上创建常量AA,而是将a5的引用返回给a6
System.out.println(a5 == a6); //true