String:不可變的 CharSequence
StringBuffer:可變的 CharSequence、且thread-safety
,所以效率較低
StringBuilder:可變的 CharSequence、非
thread-safety,所以效率較高
執行效率:StringBuilder > StringBuffer > String
String str = new String(); // new char[0];
String str1 = new String("abc"); // new char[]{'a','b','c'};
// 底層創建了一個空間16的陣列
StringBuffer sb1 = new StringBuffer(); // new char[16];
sb1.append('a'); // value[0] = 'a';
sb1.append('b'); // value[1] = 'b';
StringBuffer sb2 = new StringBuffer("abc"); // char[] value = new char["abc".length()+16];
// 問題1
System.out.println(sb2.length()); // 3 => 實際裝入陣列的長度
// 問題2 擴容問題:若要新增的資料底層的陣列盛不下了,那就需要擴容底層的陣列,默認情況下,擴容為原來容量的2倍再加2,同時將原有陣列中的元素複製到新的陣列中
// 開發中建議使用:StringBuffer(int capacity) 或 StringBuilder(int capacity),避免一開始就擴容
增 append(xxx);
刪 delete(int start, int end)
改 setChar(int index, char ch)/ replace(int start, int end, String str)
查 charAt(int index)
插入 insert(int offset, xxx)
長度 length()
遍歷 for loop + charAt()