1. 程式人生 > >Java基礎——String、StringBuiler、StringBuffer的用法和區別

Java基礎——String、StringBuiler、StringBuffer的用法和區別

1.區別

1.1 三者本質區別

String:每次增加資料都會開闢新空間,儲存資料,將上一塊空間通過GC進行回收

StringBuiler、StringBuffer:是可變長度,資料增加是直接在現有空間進行操作

1.2 StringBuiler StringBuffer區別

非執行緒安全 StringBuiler:

執行緒安全 StringBuffer:多執行緒中建議使用

 

2.用法

2.1 三者用法

String str ="abc1";
str += "jk";
StringBuilder str2 = new StringBuilder("abc2");
str2.append("jk");
StringBuffer str3 = new StringBuffer("abc3");
str3.append("jk");

2.2 具體示例

package com.java8.string0824;

public class Test1 {

    public static void main(String arg[]){

        // 1.String
        // 每次增加資料都會開闢新空間,儲存資料,將上一塊空間通過GC進行回收
        // 迴圈過程中:開闢1000個空間,銷燬999次
        long startTime = System.currentTimeMillis();
        String str ="abc1";
        System.out.println(str);
        for (int i = 0; i < 1000; i++) {
            str += "jk";
        }
        System.out.println(str);
        long endTime = System.currentTimeMillis();
        System.out.println(endTime - startTime);


        // 2.StringBuilder
        // 是可變長度,資料增加是直接在現有空間進行操作
        // 不會開闢和銷燬新空間
        // 僅僅在現有空間中,增加資料
        long startTime2 = System.currentTimeMillis();
        StringBuilder str2 = new StringBuilder("abc2");
        System.out.println(str2);
        for (int i = 0; i < 1000; i++) {
            str2.append("jk");
        }
        System.out.println(str2);
        long endTime2 = System.currentTimeMillis();
        System.out.println(endTime2 - startTime2);

        // 3.StringBuffer
        // 是可變長度,資料增加是直接在現有空間進行操作
        // 不會開闢和銷燬新空間
        // 僅僅在現有空間中,增加資料
        long startTime3 = System.currentTimeMillis();
        StringBuffer str3 = new StringBuffer("abc3");
        System.out.println(str3);
        for (int i = 0; i < 1000; i++) {
            str3.append("jk");
        }
        System.out.println(str3);
        long endTime3 = System.currentTimeMillis();
        System.out.println(endTime3 - startTime3);
    }
}

結果:

3.String、StringBuiler、StringBuffer的執行速度

StringBuile > StringBuffer > String

 

4.PS

String:針對少量的字串操作

StringBuiler、StringBuffer:大量字串操作使用另外兩個