从jdk 5开始,Java就对String字符串的+操作进行了优化,该操作编译成字节码文件后会被优化为StringBuilder的append操作。
StringBuilder.append源码
@Override
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
String.valueOf源码
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
所以,循环内String+常量的话会每次new一个StringBuilder,再调用append方法。而调用append方法之前首先要调用String.valueOf()也就是调用toString方法;