• <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 的字符串緩沖區,但不能修改??蓪⒆址彌_區安全地用于多個線程??梢栽诒匾獣r對這些方法進行同步,因此任意特定實例上的所有操作就好像是以串行順序發生的,該順序與所涉及的每個線程進行的方法調用順序一致。

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

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


            在大部分情況下    StringBuilder > StringBuffer

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

            StringBuilder > StringBuffer > String

             

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

            精品久久久久久成人AV| 无码人妻久久一区二区三区蜜桃| 久久久久一本毛久久久| 99久久人人爽亚洲精品美女| 久久国产精品一国产精品金尊 | 久久精品免费网站网| 国产精品久久久久无码av| 久久精品毛片免费观看| 久久66热人妻偷产精品9| 久久青青草原国产精品免费 | 中文字幕精品久久| 亚洲精品乱码久久久久久蜜桃| 久久精品中文字幕一区| 色99久久久久高潮综合影院 | 久久一区二区免费播放| 性高湖久久久久久久久AAAAA| 久久亚洲日韩看片无码| 久久精品中文字幕无码绿巨人| 精品国产福利久久久| 久久国产精品国语对白| 无码任你躁久久久久久老妇App| 亚洲国产精品无码久久一线| 久久精品国产亚洲精品2020| 品成人欧美大片久久国产欧美...| 午夜精品久久影院蜜桃| 亚洲国产精品无码久久| 99久久国产免费福利| 中文字幕无码久久人妻| 国产精品久久久久影视不卡| 性做久久久久久久久老女人| 国产亚洲精久久久久久无码| 久久亚洲欧洲国产综合| 久久精品九九亚洲精品| 欧美久久综合九色综合| 精品综合久久久久久97超人 | 久久天天躁夜夜躁狠狠躁2022| 久久99热只有频精品8| 国内精品伊人久久久久妇| 精品国产福利久久久| 亚洲AV无码一区东京热久久| 久久精品国产精品亚洲艾草网美妙|