//直接赋值是在常量池中创建String对象
String c = "12";
//常量池中存在返回常量池的指向地址
String d = c.intern();
System.out.println(c==d);
//new实例化在常量池和堆中都创建String对象然后返回堆得指向地址
String s = new String("ab");
//如果常量池和堆中都存在String对象 优先获取常量池
String intern = s.intern();
System.out.println(intern==s);
//此时堆中存在 常量池没有
String n = s + "a";
//获取的是堆的指向地址
String n1 = n.intern();
//此时常量池也是获取的堆中的指向地址
String n2 = "aba";
System.out.println(n==n2);
System.out.println(n1==n2);
System.out.println(n==n1);
//常量池存在,堆中不存在
String b = "ww";
//intern获取的是常量池的指向地址
String b1 = b.intern();
System.out.println(b==b1);
//new实例化取得堆中的指向地址
String b2 = new String("ww");
System.out.println(b==b2);
System.out.println(b1==b2);