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

            99re久久精品国产首页2020| 国内精品伊人久久久久AV影院| 99久久精品免费看国产一区二区三区 | 亚洲精品乱码久久久久久蜜桃| 三级三级久久三级久久| 人妻少妇久久中文字幕一区二区| 亚洲国产精品人久久| 精品国产乱码久久久久软件| 精品久久久久久中文字幕人妻最新| 色偷偷888欧美精品久久久| 久久久久久久免费视频| 国产精品久久亚洲不卡动漫| 四虎国产精品成人免费久久| 一本久久a久久精品综合夜夜| 思思久久精品在热线热| 精品国产91久久久久久久a | 奇米影视7777久久精品人人爽 | 99久久99这里只有免费的精品| 久久久久噜噜噜亚洲熟女综合| AAA级久久久精品无码片| 97香蕉久久夜色精品国产| 久久国产成人| 国产综合精品久久亚洲| 97久久久久人妻精品专区| 亚洲中文精品久久久久久不卡| 久久久国产精品| 久久久WWW免费人成精品| 国产成人精品久久亚洲高清不卡| 久久ZYZ资源站无码中文动漫| 久久久午夜精品| 一97日本道伊人久久综合影院| 人人狠狠综合久久亚洲88| 99久久国产热无码精品免费| 人妻无码αv中文字幕久久 | 久久这里只有精品18| av色综合久久天堂av色综合在| 色婷婷久久综合中文久久一本| 日韩久久无码免费毛片软件| 欧美久久亚洲精品| 欧美日韩精品久久免费| 国产aⅴ激情无码久久|