1. 程式人生 > >為什麼StringBuilder的效率要比String高?

為什麼StringBuilder的效率要比String高?

 先看一個例子:

標題

從上面的例子可以看到,StringBuilder的執行時間只有簡單字串拼接的千分之一 ,那是什麼原因造成的呢?

String在java中是不可變長的,一旦初始化就不能修改長度,簡單的字串拼接其實是建立新的String物件,再把拼接後的內容賦值給新的物件,在頻繁修改的情況下會頻繁建立物件,而StringBuilder則不會,從頭到尾只有一個例項物件,那StringBuilder是怎麼實現的呢?

 其實StringBuilder在append時並不是用String儲存,而是放到一個value的char陣列中,字串是固定長度的,而陣列是可以擴容的,這樣就不需要不停建立物件了

 那StringBuilder中陣列的初始長度是多少呢?擴容係數是多少呢?

陣列預設的初始長度是16,也可以根據構造方法指定

擴容係數: value.length * 2 + 2,而且只有當append是資料長度+value.count > value.length時才會擴容一次,不會每次都擴容去呼叫Arrays.copyof()