所有的字面量(“sdf”字符串常量)起初都假设常量池里面没有
String s = "1";
检测常量池里面有没有1,没有的话创建一个1,创建了一个对象,S是引用不是对象;
String s = new String("1");
创建了两个。一个是在堆里new出来的,一个是字符串常量池中。s是引用,不算对象
String s = new String("1") + new String("3");
创建了5个,字符串常量池1,3,new 1,3,还有一个是 + 号执行的是创建一个StringBuffer类,然后执行append()方法,然后再toSring()方法;
但是 String s = "1" + "2";只创建了一个对象12,而且还是在常量池中,编译器自动优化了就相当于 String s = "12";
String s = new String("1") + "2";
创建了4个对象,1,2两个,new一个,还有一个就是StringBuffer类;
总结:
+号只在符号左右两端都是常量字符串或者引用的时候才不会创建StringBuffer类;
如果有什么不对的地方,请各位大佬指正。