都说如果有频繁的String拼接(String=str+str)时,换用StringBuilder会比较好。
具体也没比较过性能有多少差别。
这次做了个实验看看效果差别多大。
硬件环境是:华为A9,比较老。
具体代码如下:
一个2维int矩阵,用这些数据来拼接字符串
private int rowlength = 20;
private int length = 300;
private int[][] intMatrix = new int[rowlength][length];
private Random ran = new Random();
然后产生随机int,拼接和StringBuilder都是基于这个矩阵,才6000个整数。
for (int i = 0; i < rowlength; i++) {
for (int j = 0; j < length; j++) {
intMatrix[i][j] = ran.nextInt();
}}
拼接:
private void doJoin() {
String rowStr = "";
Log.d("mooc", "doJoin start:");
for (int i = 0; i < rowlength; i++) {
for (int j = 0; j < length; j++) {
rowStr = rowStr + intMatrix[i][j];
rowStr = rowStr + ",";
}
Log.d("mooc", "doJoin row:" + i);
}
Log.d("mooc", "doJoin rowStr:" + rowStr.length());
}
很简单的拼接,并每次换行打点log看时间
log结果:耗时近40秒,而且越到后面拼接的字符串越大每次拼接耗时也越长,不可思
StringBuilder:
private void doBld() {
StringBuilder rowStr = new StringBuilder();
Log.d("mooc", "doBld start:");
for (int i = 0; i < rowlength; i++) {
for (int j = 0; j < length; j++) {
rowStr.append(intMatrix[i][j]);
rowStr.append(",");
}
Log.d("mooc", "doBld row:" + i);
}
Log.d("mooc", "doBld rowStr:" + (rowStr.toString()).length());
}
Log结果:耗时16毫秒,瞬间完成
拼接和StringBuilder果然差距很多,尤其拼接很多的时候