JAVA---String、StringBuffer、StringBuilder
阿新 • • 發佈:2022-03-22
package java0; import org.junit.Test; /** * * * * @create 2022-03-22 11:39 */ public class StringBufferBuilderTest { /* 對比String、StringBuffer、StringBuilder三者的效率 從高到低排列:StringBuilder》 StringBuffer》String */ @Test public void test3(){ long startTime=0L; long endTime=0L; String text=""; StringBuffer buffer=new StringBuffer(""); StringBuilder builder=new StringBuilder(""); startTime=System.currentTimeMillis(); for (int i = 0; i < 20000; i++) { buffer.append(String.valueOf(i)); } endTime=System.currentTimeMillis(); System.out.println(endTime-startTime); startTime=System.currentTimeMillis(); for (int i = 0; i < 20000; i++) { builder.append(String.valueOf(i)); } endTime=System.currentTimeMillis(); System.out.println(endTime-startTime); startTime=System.currentTimeMillis(); for (int i = 0; i < 20000; i++) { text=text+i; } endTime=System.currentTimeMillis(); System.out.println(endTime-startTime); } /* StringBuffer的常用方法: StringBuffer append(xxx): 提供了很多的append()方法,用於進行字串的拼接。 StringBuffer delete(int start,int end):刪除指定位置的內容 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 String subString(int start,int end):返回一個從start開始到end索引結束的左閉右開區間的子字串 public int length() public char charAt(int n) public void setChartAt(int n,char ch) */ @Test public void test2(){ StringBuffer s1=new StringBuffer("abc"); s1.append(1); s1.append('1'); System.out.println(s1); s1.delete(2,4); System.out.println(s1); s1.replace(2,4,"hello"); System.out.println(s1); s1.insert(2,false); System.out.println(s1); s1.reverse(); System.out.println(s1); String s2=s1.substring(1,3); System.out.println(s1); System.out.println(s1.length()); System.out.println(s2); } /* String、StringBuffer、StringBuilder三者的異同? String:不可變的字元序列,底層使用char[]儲存 StringBuffer:可變的字元序列;執行緒安全的,效率低;底層使用char[]儲存 StringBuilder:可變的字元序列;jdk5.0新增的,執行緒不安全的,效率高,底層使用char[]儲存 原始碼分析: String str=new String();//char[] value=new char[0]; String str1=new String("abc");//char[] value=new char[]{'a','b','c'}; StringBuffer sb1=new StringBuffer();char[] value=new char[16];底層建立了一個長度為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]; //System.out.println(sb2.length);//3 //擴容問題:如果要新增的資料底層陣列盛不下了,那就需要庫容底層的陣列。 預設情況下,擴容為原來容量的2倍+2,同時將原有陣列中的元素複製到新的陣列中。 */ @Test public void test1(){ StringBuffer sb1=new StringBuffer("abc"); sb1.setCharAt(0,'m'); System.out.println(sb1); StringBuffer sb2=new StringBuffer(); System.out.println(sb2.length());//0 } }