Java基礎 String/StringBuff/StringBuilder 常用操作方法復習/內存分析/三者的效率比較


附:jdk1.8使用IDEA安裝.創建.使用JUnit單元測試

筆記總結:

 1 /**String 復習
 2  * 1.像C++這樣的char arr[]="..." 的方式無法聲明Java的String
 3  * 2.a.compareTo(b),表示按字典序比較兩個字符串a和b,結果小於0:a表示小於b,結果大於0:a表示大於b,結果等於0表示等於(值不確定)
 4  * 3.equals() 判斷相等
 5  * 4.indexOf(String str) 返回指定子字符串在此字符串中第一次出現處的索引。
 6  *         lastindexOf(String str) 返回指定子字符串在此字符串中最后一次出現處的索引。
 7  *5.valueof()可以將基本所有的Java數據類型轉換為String 類
 8  *
 9  * 6.StringBuff 類,支持 append(), legth() , insert(),reverse()
/**StringBuffer
 *  線程安全,可變的字符序列。 字符串緩沖區就像一個String ,但可以修改。 (初始化是16個字符)
 *  在任何時間點,它包含一些特定的字符序列,但可以通過某些方法調用來更改序列的長度和內容。
 *  ---------------------------
 *StringBuilder 
    同樣可變的字符序列,較新,效率遠高於String ,高於StringBuffer!

 

簡單的方法測試代碼:

package Coding;

public class Main_of_Coding {
    public static void main(String[] args) {
        //1.String 的構造方法
        String str1=new String("first String");
        char arr[]= {'s','e','c','o','n','d',' ','S','t','r','i','n','g'};
        String str2=new String(arr);
        String str3=new String(arr,1,4);  //起始點offset: 1 ,總統計count : 4
        String str4=new String(str1+1);  //數字1不表示移動地址,表示數字1加到str1的后面
        System.out.println(" "+str1+"\t2: "+str2+"\t:3 "+str3+"\t:4"+str4);
        //2.使用
        str4=str1+str2;System.out.println(str4);  //字符串鏈接
        System.out.println(str1.charAt(0)+"  "+str1.charAt(1));  //獲取第i個字符!

        str1="aab";str2="ac";
        System.out.println(str1.compareTo(str2)); //   按字典順序比較兩個字符串。
        str1="666";str2="777";
        System.out.println(str1.compareTo(str2));
        //3.轉換成字符數組
        char a1[]=str1.toCharArray();
        System.out.println(new String(a1)+" 1:"+a1[1]+" 2:"+a1[2]);
        //4.字符串搜索
        System.out.println("indexof66: "+str1.indexOf("66"));
        System.out.println("lastindexof66: "+str1.lastIndexOf("66"));
        //

    }
}

運行結果:

 first String    2: second String    :3 econ    :4first String1
first Stringsecond String
f  i
-2
-1
666 1:6 2:6
indexof66: 0
lastindexof66: 1
對比三者的效率測試:
public class testStringBuff {
    //對比三者的效率測試
    @Test
    public void test3(){
        String text = "";
        long startTime = 0L;
        long endTime = 0L;
        StringBuffer buffer = new StringBuffer("");
        StringBuilder builder = new StringBuilder("");
        System.out.println("三者同時添加20000個數花費的時間比較!!");
        startTime = System.currentTimeMillis();
        for(int i = 0;i<20000;i++){
            buffer.append(String.valueOf(i));}
        endTime = System.currentTimeMillis();
        System.out.println("StringBuffer的執行時間:"+(endTime-startTime));
        startTime = System.currentTimeMillis();
        for(int i = 0;i<20000;i++){
            builder.append(String.valueOf(i));}
        endTime = System.currentTimeMillis();
        System.out.println("StringBuilder的執行時間:"+(endTime-startTime));
        startTime = System.currentTimeMillis();
        for(int i = 0;i<20000;i++){
            text = text + i;}
        endTime = System.currentTimeMillis();
        System.out.println("String的執行時間:"+(endTime-startTime));

    }
}

測試結果:

三者同時添加20000個數花費的時間比較!!
StringBuffer的執行時間:10
StringBuilder的執行時間:3
String的執行時間:967

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM