以前在看到一篇文章,说到for循环里拼接字符串最好用StringBuilder,而不是String+=“”,联想到读过的《阿里巴巴Java开发手册》也有相似的说辞。但那是看了以后没再深究,因此借这篇文章深刻分析一下为何for循环里拼接字符串为何最好用StringBuilder?java
平时写代码的时候,咱们常常会遇到在一个循环里去拼接字符串,为了追求效率,不少人会直接写上以下的代码:bash
public static void main(String[] args) {
String s= "" ;
for(int i=1;i<10;i++){
s+=i;
}
System.out.println(s);
}
复制代码
根据《阿里巴巴开发手册》里的说法,这种写法通常会引发空间浪费问题。下面仔细说下为何会引发这类问题。并发
javac Test.java
javap -c Test.class
能够大概看出在11行的时候new了一个java.lang.StringBuilder的对象,其余就是一些操做数栈到变量,变量到操做数栈的赋值过程。想要看懂相应字节码表明的意思,能够参考文章: Java生成字节码的意思
若是还不够直观,能够看下面的方式。app
这里就能够更明显地看出其实每次循环的时候都会去new一个StringBuilder对象,而后再toString,最后赋值给s。工具