1. 程式人生 > 實用技巧 >String與“+”的拼接之建立了幾個物件

String與“+”的拼接之建立了幾個物件

當我們寫了一段String拼接的程式碼後
  String s = "abc";
  String ss = "bcd"+s+"def"+5;
  System.out.println(ss);
我們通過jad反編譯檢視

系統幫我們做了優化,建立了一個StringBuilder物件然後進行了append的拼接,但是Stringbuilder的父類AbstractStringBuilder會建立一個char[]陣列,並且toString()會建立一個String物件

也就是外部拼接的話,並且拼接的包含變數,不光是字面量的話會呼叫StringBuilder進行優化,建立三個物件 當我們都用String拼接字面量的時候
String s = "a" + "b" + "c" + "d" + "e";
System.out.println(s);
通過jad反編譯檢視 這段程式碼只會在常量池中建立一個"abcde"的物件,如果常量池中存在"abcde"這個物件,則直接共用一個記憶體,不會建立物件,可以節省記憶體

但是當我們在迴圈體中進行String的拼接
    String a = "0";
    for (int i = 1; i < 10; i++) {
        a = a + "M";
    }
    System.out.println(a);
我們通過jad反編譯class檢視
會在迴圈體中建立一個StringBuilder物件,呼叫super(16),傳一個初始長度為16的陣列,也就是父類建構函式會建立一個char[]陣列物件,toString()建立一個String物件 所以這段程式碼會建立 迴圈次數*3的物件-> 30個物件 總結: 所以,當我們在迴圈體中進行String拼接的時候,我們應該使用StringBuilder來進行append拼接,避免使用String,減少物件的建立

參考:https://blog.csdn.net/java2000_net/article/details/3681385