在Java中,字符串的拼接有多種操作,目前我常用是兩種:
- + 運算符
- StringBuilder
目前在學習的過程中,首先被提到的就是在字符串的拼接操作中,不可以針對大量的字符串改動操作使用“+”來運行,而是應該使用StringBuilder類中的方法,那么這是為什么呢?
1 public class ArrTest { 2 public static void main(String[] args) { 3 String string = ""; 4 long begin1 = System.currentTimeMillis(); 5 for(int i = 0; i<100000; i++) { 6 string += 1; 7 } 8 long end1 = System.currentTimeMillis(); 9 10 StringBuilder sb = new StringBuilder(); 11 long begin2 = System.currentTimeMillis(); 12 for(int i = 0; i<100000; i++) { 13 sb.append(1); 14 } 15 long end2 = System.currentTimeMillis(); 16 17 18 System.out.println("String的運行時間是"+(end1-begin1)); 19 System.out.println("StringBuilder的運行時間是"+(end2-begin2)); 20 } 21 }
以上代碼是一個簡單的測試代碼,測試得知,在相同條件下,小規模的改動對於二者來說運行時間並無區別,
但是一旦涉及的改動操作容量較大時,那么String類的 + 運算的運行時間就會大大減緩,而對於StringBuilder來說,運行時間相較String的+運算來說,變化微乎其微
通過查詢底層發現,Java使用 + 進行字符串拼接操作時,底層實現依然還是使用的 StringBuilder 進行實現,每進行一次拼接操作就會創建一個新的 StringBuilder 對象
這樣進行操作的話,是會帶來很大的性能損耗,因此在少量操作時運行時間的改變不明顯,一旦涉及到大量改動操作,那么運行時間就會肉眼可見的減慢
而通過查詢StringBuilder的底層發現,StringBuilder的append操作不涉及StringBuilder對象的創建,在拼接時只涉及到自身,因此效率較高
在進行字符串拼接時需要注意,字符串本身並不可變,我們可以通過新建字符串然后以重新指向的方式拼接字符串