Bootstrap

各种方式创建String及其在jvm中的创建情况

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

;