Java——String和StringBuffer的區別
阿新 • • 發佈:2019-01-08
前言
小編最近偶然瞭解到了一個問題,String和StringBuffer的區別,然後小編就去了解和探索了一下,下面看看小編探索的內容吧
String物件一旦被建立就是固定不變的了,對String物件的任何改變都不影響到原物件,相關的任何change操作都會生成新的物件,詳細請看下面案例
String
public static void main(String[] args){
long t1=System.currentTimeMillis(); //獲取初始運算時間
String str="";
//遍歷賦值100000次
for (int i = 0; i < 100000; i++) {
str +="a";
}
long t2=System.currentTimeMillis(); //獲取運算後的時間
System.out.println(t2-t1); //運算時間
}
運算結果
這幾行程式碼看起來好像是對str這個物件賦值了100000次,其實,這只是一種假象罷了,JVM對於這幾行程式碼是這樣處理的,首先建立一個String物件str,並把“a”賦值給str,然後在遍歷中,其實JVM又建立了一個新的物件也名為str,然後再把原來的str的值和“a”加起來再賦值給新的str,而原來的str就會被JVM的垃圾回收機制(GC)給回收掉了,所以,str實際上並沒有被更改,也就是前面說的String物件一旦建立之後就不可更改了。所以,Java中對String物件進行的操作實際上是一個不斷建立新的物件並且將舊的物件回收的一個過程,所以執行速度很慢。
而StringBuffer的物件是變數,對變數進行操作就是直接對該物件進行更改,而不進行建立和回收的操作,所以速度要比String快很多。如下:
StringBuffer
public static void main(String[] args){
long t1=System.currentTimeMillis(); //獲取初始運算時間
StringBuffer str=new StringBuffer();
//遍歷賦值100000次
for (int i = 0; i <100000; i++) {
str.append("a" );
}
long t2=System.currentTimeMillis(); //獲取運算後時間
System.out.println(t2-t1); //運算時間
}
運算結果
用時的時間長短一眼就能看出來了,相差到這個倍數,相信也不用做什麼解釋了。
總結
小資料量時是看不出來區別的,因為反應速度都是非常短的,但是一旦資料量達到一個量級,區別瞬間就出來了,還是要自己去體會才行,部分內容 參考部落格
本篇部落格到此結束,感謝您的閱讀