String常量池问题
对呀 2019-01-02 07:47:18 jdk 1.8运行以下代码,第一个是true,第二个是false ,第三个是true
String s1 = "aaa" + new String("aaa");
s1.intern();
String s2 = "aaaaaa";
System.out.println(s1 ==s2);//true
String s3 = new String("bbbbbb");
s3.intern();
String s4 = "bbbbbb";
System.out.println(s3 ==s4);//false
char[] ch = {'c','c','c','c','c','c'};
String s5 = new String(ch, 0, 6);
s5.intern();
String s6 = "cccccc";
System.out.println(s5 ==s6);//true
疑惑点:字符串按拼接和直接new的不同形式创建对象,查看第一种编译的class字节码,发现是通过StringBuilder.append实现,最后的toString,省去中间过程就类似与第三种情况,这几种情况内存是怎么变化的呢,为什么第二个是false另外两个是true