Java-StringBuffer、StringBuilder
阿新 • • 發佈:2020-08-09
public class StringBufferTest { /** * String \ StringBuffer \StringBuilder三者異同 * String:不可變的字元序列:底層使用char[]儲存 * StringBuffer:可變的字元序列:執行緒安全的,效率偏低;底層使用char[]儲存 * StringBuilder:可變的字元序列:執行緒不安全的,效率高;底層使用char[]儲存 * <p> * <p> * <p> * 底層資料結構 * 原始碼分析 * String str=new String();//char [] value=new char[0] * String str=new String("abc");//char [] value=new char[]{'a','b','c'}; * <p> * StringBuffer sb1=new StringBuffer();//char [] value=new char[16];//底層建立了一個長度為16的陣列 * sb1.append('a');//value[0]='a'; * sb1.append('b');//value[1]='b'; * <p> * StringBuffer sb2=new StringBuffer("abc");//char []value=new char["abc".length+16]{'a','b','c'}; * <p> * //問題一:System.out.println(sb2.length);//3 * <p> * //問題二:陣列擴容(擴容問題):如果新增的資料,底層陣列盛不下了,那就需要擴容底層的陣列 * 預設情況下,擴容為原來容量的2倍+2,同時將原來陣列中的元素複製到新的陣列中。 * <p> * <p> * 儘量避免擴容,開發中建議使用StringBuffer(int capacity) 或 StringBuilder(int capacity)*/ @Test public void test1() { //可變 StringBuffer stringBuffer = new StringBuffer("abc"); stringBuffer.setCharAt(0, 'm'); System.out.println(stringBuffer); } /** * StringBuffer常用方法 * StringBuffer append(xxx):提供了很多append()方法,用於進行字串拼接 * StringBuffer delete(int start, int end):刪除指定範圍的內容【start,end) * StringBuffer deleteCharAt(int index):刪除指定位置的字元 * StringBuffer replace(int start, int end, String str):把【start,end)位置替換為str * StringBuffer insert(int offset, XXX):在指定位置插入XXX * StringBuffer reverse():把當前字元序列逆轉 * public int indexOf(String str) * public synchronized String substring(int start, int end):返回一個從start開始到end索引結束的左閉右開的子字串 * public int length() * public char charAt(int n) * public void setCharAt(int n,char ch) * * * 總結: * 增:append(XXX) * 刪:delete(int start, int end)\deleteCharAt(int index) * 改:replace(int start, int end, String str)\setCharAt(int n,char ch) * 查:charAt(int n) * 插入:insert(int offset, XXX) * 長度:length() * 遍歷: * * **/ @Test public void test2() { // StringBuffer sb1=new StringBuffer(32); // sb1.append(1); // sb1.append("hello"); // System.out.println(sb1); // // sb1.delete(0,3); // System.out.println(sb1); // // StringBuffer sb2=new StringBuffer("helloworld"); // sb2.deleteCharAt(1);// System.out.println(sb2); // StringBuffer sb3=new StringBuffer("helloworld"); // sb3.replace(1,4,"test"); // System.out.println(sb3); // // StringBuffer sb4=new StringBuffer("abcd"); // sb4.insert(1,"123"); // System.out.println(sb4); // // StringBuffer s5=new StringBuffer("abcd"); // s5.reverse(); // System.out.println(s5); StringBuffer s6=new StringBuffer("abcdhello"); System.out.println(s6.indexOf("hello")); System.out.println(s6.substring(2, 5)); } }