String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s3 == s2); //打印FALSE
说明s3和s2指向不同的字符串对吗,不是说常量池中的字符串不会重复创建吗,这里不是重复创建了吗
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s3 == s2); //打印FALSE
说明s3和s2指向不同的字符串对吗,不是说常量池中的字符串不会重复创建吗,这里不是重复创建了吗
首先你要明白s3和s2通过==比的是地址。s2=s1+"b"。由于s1编译器不能确定其值会在heap中new一个新的对象付给s2。而s3,"a"+"b"在编译期就可以确定值了,编译器会进行优化直接把他们表示成"ab"存储到String Pool中。所以两个东西了,肯定不同的地址了。!