• <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 肥仔 閱讀(770) 評論(0)  編輯 收藏 引用 所屬分類: Web-后臺

            青青草原综合久久大伊人| 理论片午午伦夜理片久久 | 99久久国产精品免费一区二区| 久久久久久毛片免费看| 久久亚洲国产最新网站| 久久这里只有精品18| 伊人久久综合热线大杳蕉下载| 久久婷婷五月综合成人D啪 | 久久精品亚洲一区二区三区浴池| 99久久精品国产麻豆| 亚洲v国产v天堂a无码久久| 狼狼综合久久久久综合网| 91久久九九无码成人网站| 久久久久久综合网天天| 亚洲午夜久久久精品影院| 久久久久久午夜精品| 欧美久久综合性欧美| 99久久做夜夜爱天天做精品| 久久国产精品一区二区| 一本色综合久久| 亚洲成色999久久网站| 久久99久国产麻精品66 | 久久精品国产2020| 99久久婷婷国产一区二区| 日产精品久久久久久久性色 | 伊人久久大香线蕉精品不卡 | 久久大香萑太香蕉av| 香蕉久久一区二区不卡无毒影院| 久久国语露脸国产精品电影| 一本大道久久香蕉成人网| 国产成人久久久精品二区三区| 久久精品国产久精国产思思 | 久久青草国产手机看片福利盒子 | 麻豆精品久久久久久久99蜜桃 | 国产综合免费精品久久久| 国产精品久久网| 久久亚洲AV成人无码国产 | 97久久国产露脸精品国产| 久久婷婷五月综合色奶水99啪| 久久99免费视频| 久久99热精品|