1. 程式人生 > >細說string和stringbuffer

細說string和stringbuffer

使用 新的 string 喜歡 出錯 app col reserve 成了

=========================================================================================

在我看來,學習java最重要是要理解what(這東西是什麽),why(為什麽要用它),where(在哪用它),how(怎麽用)。所以接下來,我都是以這樣的思想來和大家交流,從最基礎的知識講起。如果有啥出錯的,歡迎大家前來批評。本人虛心接納。

=========================================================================================

一.what(什麽是String)

我們在前面已經了解過String類,它不同於基本類型,它是引用類型,這就註定了String並不像基本類型那麽簡單,它是一個類,有著很多方法,這裏我們不講方法,講最基本的String創建。創建一個String字符串很簡單,如下:

String a="Hello word!";

就這麽簡單,但這裏要註意,我們一般喜歡這樣用:

技術分享圖片

這樣看起來,好像是a的值改變了,放在基本類型當然是,只是String就不一樣了,因為String是引用類型。所以a的值只不過是放在堆中數據的地址而已,當執行 a= "2"; 創建了一個新的對象 "2",而原來的 "1" 還存在於內存中,不過a的引用由對1變成了對2.。

技術分享圖片

二.解決方法

采用StringBuffer和StringBuilder:和 String 類不同的是,StringBuffer 和 StringBuilder 類的對象能夠被多次的修改,並且不產生新的未使用對象。StringBuilder 類在 Java 5 中被提出,它和 StringBuffer 之間的最大不同在於 StringBuilder 的方法不是線程安全的(不能同步訪問)。由於 StringBuilder 相較於 StringBuffer 有速度優勢,所以多數情況下建議使用 StringBuilder 類。然而在應用程序要求線程安全的情況下,則必須使用 StringBuffer 類。

StringBuffer a = new StringBuffer("Hello Word");

註意:

(1).StringBuffer 和 String 是有一定的區別的,首先,String 是被 final 修飾的,他的長度是不可變的,就算調用 String 的concat 方法,那也是把字符串拼接起來並重新創建一個對象,把拼接後的 String 的值賦給新創建的對象,而 StringBuffer 的長度是可變的,調用StringBuffer 的 append 方法,來改變 StringBuffer 的長度,並且,相比較於 StringBuffer,String 一旦發生長度變化,是非常耗費內存的!

(2).StringBuffer 和 StringBuilder 長度可變;String長度不可變StringBuffer 線程安全 StringBuilder 線程不安全;StringBuilder 速度快。

===========================================================================

用心查閱,有心分享,分享之際,互相指教,受益你我,何樂不為?

===========================================================================

細說string和stringbuffer