• <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

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

            String與StringBuffer

            StringStringBuffer的區別,網上資料可以說是數不勝數,但是看到這篇文章,感覺里面做的小例子很有代表性,所以轉一下,并自己做了一點總結。

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

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

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

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

            String:

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


            StringBuffer:

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


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

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

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

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

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

            另一處轉載:

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

            而如果是使用 StringBuffer 類則結果就不一樣了,每次結果都會對 StringBuffer 對象本身進行操作,而不是生成新的對象,再改變對象引用。所以在一般情況下我們推薦使用 StringBuffer ,特別是字符串對象經常改變的情況下。而在某些特別情況下, 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”);

                   你會很驚訝的發現,生成 String S1 對象的速度簡直太快了,而這個時候 StringBuffer 居然速度上根本一點都不占優勢。其實這是 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 會規規矩矩的按照原來的方式去做, S1 對象的生成速度就不像剛才那么快了,一會兒我們可以來個測試作個驗證。

            在大部分情況下    StringBuffer > String

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

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

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

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


            在大部分情況下    StringBuilder > StringBuffer

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

            StringBuilder > StringBuffer > String

             

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

            久久婷婷久久一区二区三区| 2021国产精品午夜久久| 久久久久久久综合日本亚洲| 狠狠狠色丁香婷婷综合久久俺| 久久精品中文字幕久久| 亚洲国产一成久久精品国产成人综合| 午夜视频久久久久一区| 国产精品99精品久久免费| 久久伊人精品青青草原日本| 久久精品人人槡人妻人人玩AV| 久久久久久国产精品免费免费| 亚洲精品乱码久久久久久久久久久久 | 久久精品国产亚洲AV影院| 日产精品久久久一区二区| 久久久精品波多野结衣| 国产91久久精品一区二区| 久久亚洲精品国产精品婷婷| 国产成人久久777777| 国产亚洲精品自在久久| 久久久久久久女国产乱让韩| 久久成人国产精品一区二区| 91精品国产9l久久久久| 狠狠色婷婷久久综合频道日韩| 精品熟女少妇aⅴ免费久久| 久久99精品国产麻豆宅宅| 色8久久人人97超碰香蕉987| 久久久久久国产精品美女| 无码人妻少妇久久中文字幕| 精品久久久久久无码国产| 91精品久久久久久无码| 国产精品18久久久久久vr| 久久精品国产亚洲AV麻豆网站 | 久久久久se色偷偷亚洲精品av| 成人a毛片久久免费播放| 久久99热国产这有精品| 99精品久久精品一区二区| 久久久一本精品99久久精品66| 精品国产乱码久久久久久人妻| 久久婷婷色香五月综合激情| 精品久久久久成人码免费动漫 | 四虎国产精品成人免费久久|