- String 是个final类;
- jdk7之后String的常量池迁到了HEAP里来;
- String.intern() 方法会检查常量池中是否有此字符串,如果没有则添加进常量池并返回;
- String s1 = "1" + "2"; 编译之后会优化成如下
String s = "12"
- String s2 = s1 + "2"; 编译之后会优化成如下
String s2 = new StringBuilder().append(s1).append("2").toString();
+ 符号会触发此操作,因此此过程java会创建三个对象,分别是 stringBuilder、12(常量)、 s对象。因此循环调用 += 时最好优化成append形式;