阿里規約
先來看阿里java開發手冊的第22條,循環體內,字符串的連接方式,使用 StringBuilder 的 append 方法進行擴展。
說明:下例中,反編譯出的字節碼文件顯示每次循環都會 new 出一個 StringBuilder 對象,然後進行 append操作,最後通過 toString 方法返回 String 對象,造成內存資源浪費。
反例:
String str = "start";
for (int i = 0; i < 100; i++) {
str = str + "hello";
}
反編譯
我麼先寫一個類測試一下是否是這樣的呢?眼見爲實,耳聽爲虛,Let`s go。
反編譯 javap -c Test.class ,接下來看結果,從反編譯的結果看循環體內每拼接一次就會去new一個StringBuilder。
那麼,m2方法的字節碼呢?我們可以看到是直接調用的append方法,而沒有每循環一次new一個StringBuilder對象了。
總結
1、字符串拼接,+號和StringBuilder是相等的,但是在循環體內使用 StringBuilder 的 append 方法效率更優,尤其是數據量很大的情況下。
2、使用字節碼的方式可以很好查看代碼底層的執行,從而可以看出哪些實現效率高,哪些實現效率低。可以更好的對我們的代碼做優化。讓程序執行效率更高。
關注我,並後臺回覆關鍵字【手冊】獲取最新的阿里java開發手冊【泰山版】