String與“+”的拼接之建立了幾個物件
阿新 • • 發佈:2020-12-11
當我們寫了一段String拼接的程式碼後
會在迴圈體中建立一個StringBuilder物件,呼叫super(16),傳一個初始長度為16的陣列,也就是父類建構函式會建立一個char[]陣列物件,toString()建立一個String物件
所以這段程式碼會建立 迴圈次數*3的物件-> 30個物件
總結:
所以,當我們在迴圈體中進行String拼接的時候,我們應該使用StringBuilder來進行append拼接,避免使用String,減少物件的建立
參考:https://blog.csdn.net/java2000_net/article/details/3681385
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檢視