字符串拼接,大多數時候都是直接選擇+這種簡單、暴力的方式,如果數據量感覺不到對性能影響有多大,實際在不同的場景,選擇不同的拼接方式,還是很有必要的,而且+這種方式看着就很Low,是不是?
下面對幾種字符串拼接做下對比:
第一種:+ 拼接int
String str = "拼接第";
long startTime = new Date().getTime();
for (int i = 0; i < 50000; i++) {
str = str + i;
}
long endTime = new Date().getTime();
System.out.println("採用+號拼接整數耗時:" + (endTime - startTime));
採用+號拼接整數耗時:9479 原因:需要把i先轉成int 再轉成Integter,再通過toString強轉,然後採用StringBuilder拼接,會創建大量的StringBuilder對象
第二種:+拼接String
String str = "拼接第";
long startTime = new Date().getTime();
for (int i = 0; i < 50000; i++) {
str = str + “條”;
}
long endTime = new Date().getTime();
System.out.println("採用+號拼接字符串耗時:" + (endTime - startTime));
採用+號拼接字符串耗時:5063 和第一種相比,減去了i先轉成int 再轉成Integter,再通過toString強轉,所以時間消耗少了很多
第三種:concat
String str = "拼接第";
long startTime = new Date().getTime();
for (int i = 0; i < 50000; i++) {
str = str.concat(String.valueOf(i));
}
long endTime = new Date().getTime();
System.out.println("採用concat號拼接耗時:" + (endTime - startTime));
採用concat號拼接耗時:4010 ,內部會採用char數組的方式進行組合,然後通過new String重新構建,源碼如下:
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
int len = value.length;
char buf[] = Arrays.copyOf(value, len + otherLen);
str.getChars(buf, len);
return new String(buf, true);
}
第四種:StringBuilder
String str = "拼接第";
StringBuilder stringBuilder = new StringBuilder();
long startTime = new Date().getTime();
for (int i = 0; i < 5000000; i++) {
stringBuilder.append(i);
}
str = str + stringBuilder;
long endTime = new Date().getTime();
System.out.println("採用StringBuilder拼接耗時:" + (endTime - startTime));
採用StringBuilder號拼接耗時:535
第五中:StringBuffer
String str = "拼接第";
StringBuffer stringBuffer = new StringBuffer();
long startTime = new Date().getTime();
for (int i = 0; i < 5000000; i++) {
stringBuffer.append(i);
}
str = str + stringBuffer;
long endTime = new Date().getTime();
System.out.println("採用StringBuffer拼接耗時:" + (endTime - startTime));
採用StringBuffer號拼接耗時:735
對比StringBuffer、StringBuilder
StringBuilder和StringBuffer在次數同爲1萬次的時候,兩者差別不大,一旦擴充到幾百萬甚至幾千萬,那麼StringBuilder明顯比StringBuffer快了不少
經查看StringBuffer裏面的append多了一個synchronized(同步)修飾符,所以,耗時長一點。也就是說StringBuffer在保證線程安全的情況下效率被降低了
所以,各位可以根絕不同的場景選擇不同的拼接字符串的方式~