posts - 495,  comments - 11,  trackbacks - 0

          ????????? String類用來表示那些創(chuàng)建后就不會再改變的字符串,它是immutable的。而StringBuffer類用來表示內(nèi)容可變的字符串,并提供了修改底層字符串的方法。

          ????????? 當我們進行字符拼接時,最好使用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.");

          ????????? 從表面看來String類只用一個加號(+)便完成了字符串的拼接,而StringBuffer類卻要調(diào)用一個append()方法,是否實現(xiàn)起來更簡潔,更單純呢?其實不然,讓我們了解一下程序運行內(nèi)部發(fā)生了哪些事情:

          ????????? 經(jīng)編譯后程序的bytecode(字節(jié)碼)展示出了實質(zhì): 在用String類對象直接拼接時,JVM會創(chuàng)建一個臨時的StringBuffer類對象,并調(diào)用其append()方法完成字符串的拼接,這是因為String類是不可變的,拼接操作不得不使用StringBuffer類(并且--JVM會將"You are nice."和"I love you so much."創(chuàng)建為兩個新的String對象)。之后,再將這個臨時StringBuffer對象轉(zhuǎn)型為一個String,代價不菲!可見,在這一個簡單的一次拼接過程中,我們讓程序創(chuàng)建了四個對象:兩個待拼接的String,一個臨時StringBuffer,和最后將StringBuffer轉(zhuǎn)型成為的String--它當然不是最初的str了,這個引用的名稱沒變,但它指向了新的String對象。

          ????????? 而如果直接使用StringBuffer類,程序?qū)⒅划a(chǎn)生兩個對象:最初的StringBuffer和拼接時的String("I love you so much."),也不再需要創(chuàng)建臨時的StringBuffer類對象而后還得將其轉(zhuǎn)換回String對象。

          ????????? 可以想象,當我們的字符串要被循環(huán)拼接若干段時,用String類直接操作會帶來多少額外的系統(tǒng)開銷,生成多少無用的臨時StringBuffer對象,并處理多少次無謂的強制類型轉(zhuǎn)換哪。

          posted on 2007-05-04 15:25 jadmin 閱讀(97) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          主站蜘蛛池模板: 汶川县| 德庆县| 九江市| 漳州市| 凤城市| 哈巴河县| 华安县| 睢宁县| 江山市| 邵阳县| 江口县| 江孜县| 阳江市| 广宁县| 南城县| 阜宁县| 宿州市| 文安县| 紫阳县| 竹山县| 南靖县| 竹北市| 乌鲁木齐市| 长子县| 定安县| 石台县| 金秀| 芦溪县| 东城区| 博白县| 靖远县| 依兰县| 天气| 乡宁县| 邵阳县| 迁安市| 江油市| 来凤县| 贵港市| 宾阳县| 华阴市|