為什么 idea 建議去掉 StringBuilder,使用“+”拼接字符串
共 6759字,需瀏覽 14分鐘
·
2024-07-25 07:22
閱讀本文大概需要 4 分鐘。
來自:京東云開發(fā)者社區(qū)
內(nèi)容翻譯:報告StringBuffer、StringBuilder或StringJoiner的任何用法,這些用法可以用單個java.lang.String串聯(lián)來替換。使用字符串串聯(lián)可以使代碼更短、更簡單。只有當(dāng)?shù)玫降拇?lián)至少與原始代碼一樣高效或更高效時,此檢查才會報告。
/**
* 使用+拼接字符串
*/
public String concatenationStringByPlus(String prefix, int i) {
return prefix + "-" + i;
}
/**
* 使用StringBuilder拼接字符串
*/
public String concatenationStringByStringBuilder(String prefix, int i) {
return new StringBuilder().append(prefix).append("-").append(i).toString();
}
/**
* 測試使用+拼接字符串耗時
*/
@Test
public void testStringConcatenation01ByPlus() {
long startTime = System.currentTimeMillis();
int count = 100000;
for (int i = 0; i < count; i++) {
String str = concatenationStringByPlus("testStringConcatenation01ByStringBuilder:", i);
}
long endTime = System.currentTimeMillis();
System.out.println("testStringConcatenation01ByPlus,拼接字符串" + count + "次,花費" + (endTime - startTime) + "秒");
}
/**
* 測試使用StringBuilder拼接字符串耗時
*/
@Test
public void testStringConcatenation02ByStringBuilder() {
long startTime = System.currentTimeMillis();
int count = 100000;
for (int i = 0; i < count; i++) {
String str = concatenationStringByStringBuilder("testStringConcatenation02ByStringBuilder:", i);
}
long endTime = System.currentTimeMillis();
System.out.println("testStringConcatenation02ByStringBuilder,拼接字符串" + count + "次,花費" + (endTime - startTime) + "秒");
}
testStringConcatenation01ByPlus,拼接字符串100000次,花費33秒
testStringConcatenation02ByStringBuilder,拼接字符串100000次,花費36秒
javap -c StringTest.class,對class文件進行反編譯,查看編譯后的代碼差異。這里不要使用Intellij idea和JD進行反編譯,因為反編譯有優(yōu)化,會都反編譯成“+”拼接的,看不出來編譯后的真正情況。
/**
* 循環(huán)使用+拼接字符串
*/
@Test
public void testLoopStringConcatenation03ByPlus() {
long startTime = System.currentTimeMillis();
int count = 10000;
String str = "testLoopStringConcatenation03ByPlus:";
for (int i = 0; i < count; i++) {
str = str + "-" + i;
}
System.out.println(str);
long endTime = System.currentTimeMillis();
System.out.println("testLoopStringConcatenation03ByPlus,拼接字符串" + count + "次,花費" + (endTime - startTime) + "秒");
}
/**
* 測試循環(huán)使用StringBuilder拼接字符串耗時
*/
@Test
public void testLoopStringConcatenation04ByStringBuilder() {
long startTime = System.currentTimeMillis();
int count = 100000;
StringBuilder stringBuilder = new StringBuilder("testLoopStringConcatenation04ByStringBuilder:");
for (int i = 0; i < count; i++) {
stringBuilder.append("-");
stringBuilder.append(i);
}
String str = stringBuilder.toString();
System.out.println(str);
long endTime = System.currentTimeMillis();
System.out.println("testLoopStringConcatenation04ByStringBuilder,拼接字符串" + count + "次,花費" + (endTime - startTime) + "秒");
}
testLoopStringConcatenation03ByPlus,拼接字符串10000次,花費463秒
testLoopStringConcatenation04ByStringBuilder,拼接字符串10000次,花費13秒
-
單純的字符串拼接使用“+”,更快更簡潔。
-
循環(huán)拼接時使用“+”拼接字符串效率較低,推薦使用 StringBuilder。
推薦閱讀:
14 個 SpringBoot 優(yōu)化小妙招,寫代碼像寫詩
程序員在線工具站:cxytools.com
推薦一個我自己寫的工具站:http://cxytools.com,專為程序員設(shè)計,包括時間日期、JSON處理、SQL格式化、隨機字符串生成、UUID生成、隨機數(shù)生成、文本Hash...等功能,提升開發(fā)效率。
?戳閱讀原文直達! 朕已閱 
