java中string、stringBuild、stringBuffer的區別


(1)string

       1,Stirng是對象不是基本數據類型 
       2,String是final類,不能被繼承。是不可變對象,一旦創建,就不能修改它的值。 
       3,對於已經存在的Stirng對象,修改它的值,就是重新創建一個對象,然后將新值賦予這個對象 

(2)stringBuffer

   1,一個類似於 String 的字符串緩沖區,對它的修改的不會像String那樣重創建對象。 
   2,使用append()方法修改Stringbuffer的值,使用toString()方法轉換為字符串。 

(3)stringBuild

       是jdk1.5后用來替換stringBuffer的一個類,大多數時候可以替換StringBuffer。和StringBuffer的區別在於Stringbuild是一個單線程使用的類,不值執行線程同步所以比              StringBuffer的速度快,效率高。是線程非安全的。

(4)區別,聯系

使用舉例 
String s1 = “hello”; 
s1=“world”; 
這個操作其實是:其實是創建了兩個String對象。 
String s2 = "hello" 
s2 += "world"; 
這操作是:先創建一個String對象,在接下來進行字符串連接的時候,有創建了一個StringBuild(jdk1.5前是StringBuffer),然后調用append()方法,最后調用toString()方法。 
有此可以看出String對字符的操作比直接使用Stringbuffer(或者StringBuild)要多出附加的操作,而且String是不可變對象,使用String對字符串操作會產生大量的、多余java對象。所以結果是:影響性能,占用空間。 
程序舉例: 
分別使用String和StringBuffer對字符串“0123456789”累加10000次,然后統計耗時多長 

        String str = "0123456789"; 
        String str2 = ""; 
        int count = 10000; 
        long start = System.currentTimeMillis(); 
        for (int i = 0; i < count; i++) { 
            str2 += str; 
        } 
        long end = System.currentTimeMillis(); 
        long time = (end - start); 
        System.out.println(time); 
運行多次,在我的機器上平均時間約等於3300,即3.3秒,下面用StringBuffer來操作,查看結果 
String str = "0123456789"; 
StringBuffer sb = new StringBuffer(); 
int count = 10000; 
long start = System.currentTimeMillis(); 
for (int i = 0; i < count; i++) { 
sb.append(str); 

String str2 = sb.toString(); 
long end = System.currentTimeMillis(); 
long time = (end - start); 
System.out.println(time); 
同樣在我的機器上結果平均結果小於10,即0.01秒,兩者相差300多倍,而且隨着循環次數的增加這個差距逐漸增大 


免責聲明!

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



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