Java String 與 StringBuffer 用法區別

來源:互聯網
上載者:User
Java String 與 StringBuffer 用法區別Java String 與 StringBuffer 用法區別2007-05-22 10:03String類用來表示那些建立後就不會再改變的字串,它是immutable的。而StringBuffer類用來表示內容可變的字串,並提供了修改底層字串的方法。 

--當我們進行字元拼接時,請使用StringBuffer類而非String類,因為前者將比後者快上百倍。 

的確,在程式的太多場合我們都會進行字串拼接工作,簡單的程式碼範例如下: 

String str="You are nice."; 
str+="I love you so much."; 

如果用StringBuffer類的話,代碼如下: 

StringBuffer str= new StringBuffer("You are nice."); 
str.append("I love you so much."); 
轉自http://wzdoxu.iteye.com/blog/262022
從表面看來String類只用一個加號(+)便完成了字串的拼接,而StringBuffer類卻要調用一個append()方法,是否實現起來更簡潔,更單純呢?其實不然,讓我們瞭解一下程式運行內部發生了哪些事情: 

經編譯後程式的bytecode(位元組碼)展示出了實質: 在用String類對象直接拼接時,JVM會建立一個臨時的StringBuffer類對象,並調用其append()方法完成字串的拼接,這是因為String類是不可變的,拼接操作不得不使用StringBuffer類(並且--JVM會將"You are nice."和"I love you so much."建立為兩個新的String對象)。之後,再將這個臨時StringBuffer對象轉型為一個String,代價不菲!可見,在這一個簡單的一次拼接過程中,我們讓程式建立了四個對象:兩個待拼接的String,一個臨時StringBuffer,和最後將StringBuffer轉型成為的String--它當然不是最初的str了,這個引用的名稱沒變,但它指向了新的String對象。 

而如果直接使用StringBuffer類,程式將只產生兩個對象:最初的StringBuffer和拼接時的String("I love you so much."),也不再需要建立臨時的StringBuffer類對象而後還得將其轉換回String對象。 

可以想象,當我們的字串要被迴圈拼接若干段時,用String類直接操作會帶來多少額外的系統開銷,產生多少無用的臨時StringBuffer對象,並處理多少次無謂的強制類型轉換哪。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.