• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            String與StringBuffer

            StringStringBuffer的區(qū)別,網(wǎng)上資料可以說是數(shù)不勝數(shù),但是看到這篇文章,感覺里面做的小例子很有代表性,所以轉(zhuǎn)一下,并自己做了一點總結(jié)。

            java中有3個類來負責字符的操作。

            1.Character 是進行單個字符操作的,

            2.String 對一串字符進行操作。不可變類。

            3.StringBuffer 也是對一串字符進行操作,但是可變類。

            String:

            是對象不是原始類型;為不可變對象,一旦被創(chuàng)建,就不能修改它的值;對于已經(jīng)存在的String對象的修改都是重新創(chuàng)建一個新的對象,然后把新的值保存進去;String final,即不能被繼承。


            StringBuffer:

            是一個可變對象,當對他進行修改的時候不會像String那樣重新建立對象;它只能通過構(gòu)造函數(shù)來建立(StringBuffer sb = new StringBuffer());不能通過付值符號對他進行付值(如:sb = "welcome to here!";//這樣是錯誤的);對象被建立以后,在內(nèi)存中就會分配內(nèi)存空間,并初始保存一個null.StringBuffer中付值的時候可以通過它的append方法(如:sb.append("hello"))。


            字符串連接操作中StringBuffer的效率要比String:

            eg
            String str = new String("welcome to ");
            str += "here";

            其處理步驟實際上是通過建立一個StringBuffer,然后調(diào)用append(),最后
            再將StringBuffer.toSting();這樣的話String的連接操作就比StringBuffer多出了一些附加操作,當然效率上要打折扣。

            并且由于String 對象是不可變對象,每次操作Sting 都會重新建立新的對象來保存新的值.
            這樣原來的對象就沒用了,就要被垃圾回收.這也是要影響性能的。

            總結(jié): 如果在程序中需要對字符串進行頻繁的修改連接操作的話.使用StringBuffer性能會更高。

            另一處轉(zhuǎn)載:

            String 類型和StringBuffer 類型的主要性能區(qū)別其實在于 String 是不可變的對象,因此在每次對 String 類型進行改變的時候其實都等同于生成了一個新的 String 對象,然后將指針指向新的 String 對象,所以經(jīng)常改變內(nèi)容的字符串最好不要用 String ,因為每次生成對象都會對系統(tǒng)性能產(chǎn)生影響,特別當內(nèi)存中無引用對象多了以后, JVM GC 就會開始工作,那速度是一定會相當慢的。

            而如果是使用 StringBuffer 類則結(jié)果就不一樣了,每次結(jié)果都會對 StringBuffer 對象本身進行操作,而不是生成新的對象,再改變對象引用。所以在一般情況下我們推薦使用 StringBuffer ,特別是字符串對象經(jīng)常改變的情況下。而在某些特別情況下, String 對象的字符串拼接其實是被 JVM 解釋成了 StringBuffer 對象的拼接,所以這些時候 String 對象的速度并不會比 StringBuffer 對象慢,而特別是以下的字符串對象生成中, String 效率是遠要比 StringBuffer 快的:

                   String S1 = “This is only a” + “ simple” + “ test”;

                   StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);

                   你會很驚訝的發(fā)現(xiàn),生成 String S1 對象的速度簡直太快了,而這個時候 StringBuffer 居然速度上根本一點都不占優(yōu)勢。其實這是 JVM 的一個把戲,在 JVM 眼里,這個

                   String S1 = “This is only a” + “ simple” + “test”; 其實就是:

                   String S1 = “This is only a simple test”; 所以當然不需要太多的時間了。但大家這里要注意的是,如果你的字符串是來自另外的 String 對象的話,速度就沒那么快了,譬如:

            String S2 = “This is only a”;

            String S3 = “ simple”;

            String S4 = “ test”;

            String S1 = S2 +S3 + S4;

            這時候 JVM 會規(guī)規(guī)矩矩的按照原來的方式去做, S1 對象的生成速度就不像剛才那么快了,一會兒我們可以來個測試作個驗證。

            在大部分情況下    StringBuffer > String

            StringBuilder JDK5.0 中新增加的一個類,它跟 StringBuffer 的區(qū)別看下面的介紹(來源 JavaWorld ):

            Java.lang.StringBuffer 線程安全的可變字符序列。類似于 String 的字符串緩沖區(qū),但不能修改。可將字符串緩沖區(qū)安全地用于多個線程。可以在必要時對這些方法進行同步,因此任意特定實例上的所有操作就好像是以串行順序發(fā)生的,該順序與所涉及的每個線程進行的方法調(diào)用順序一致。

                   每個字符串緩沖區(qū)都有一定的容量。只要字符串緩沖區(qū)所包含的字符序列的長度沒有超出此容量,就無需分配新的內(nèi)部緩沖區(qū)數(shù)組。如果內(nèi)部緩沖區(qū)溢出,則此容量自動增大。從 JDK 5.0 開始,為該類增添了一個單個線程使用的等價類,即 StringBuilder 。與該類相比,通常應該優(yōu)先使用 StringBuilder 類,因為它支持所有相同的操作,但由于它不執(zhí)行同步,所以速度更快。

            但是如果將 StringBuilder 的實例用于多個線程是不安全的。需要這樣的同步,則建議使用 StringBuffer


            在大部分情況下    StringBuilder > StringBuffer

            因此,根據(jù)這個不等式的傳遞定理: 在大部分情況下

            StringBuilder > StringBuffer > String

             

            posted on 2009-08-25 22:19 肥仔 閱讀(768) 評論(0)  編輯 收藏 引用 所屬分類: Web-后臺

            精品久久久久久国产潘金莲| 久久国产影院| 亚洲欧美精品一区久久中文字幕| 久久精品国产福利国产秒| 丰满少妇高潮惨叫久久久| 99久久无色码中文字幕人妻| 久久成人小视频| 久久亚洲精品国产精品婷婷| 久久久久亚洲精品中文字幕| 99久久国产热无码精品免费久久久久| 国产午夜免费高清久久影院| 久久精品中文騷妇女内射| aaa级精品久久久国产片| 好久久免费视频高清| 亚洲国产精品久久久久网站 | 亚洲国产精品久久| 草草久久久无码国产专区| 精品久久国产一区二区三区香蕉| 狠狠色综合网站久久久久久久| 久久国产精品国语对白| 久久受www免费人成_看片中文| 漂亮人妻被中出中文字幕久久 | 国产午夜电影久久| 久久影视国产亚洲| 久久久亚洲裙底偷窥综合| 久久久国产乱子伦精品作者| 1000部精品久久久久久久久| 99久久国产综合精品麻豆| 久久国产视频99电影| 99精品国产99久久久久久97| 色成年激情久久综合| 一级做a爰片久久毛片免费陪| 麻豆一区二区99久久久久| 亚洲狠狠久久综合一区77777 | 精品久久久久久国产免费了| 狠狠色婷婷久久一区二区| 久久综合狠狠综合久久激情 | 久久久久久国产a免费观看黄色大片 | 久久SE精品一区二区| 久久国产精品偷99| 国产一级持黄大片99久久|