全面解釋StringBuilder、StringBuffer和String的關系
          1. String 類
               String的值是不可變的,這就導致每次對String的操作都會生成新的String對象,不僅效率低下,而且大量浪費有限的內(nèi)存空間。
             String a = "a"; //假設a指向地址0x0001
             a = "b";//重新賦值后a指向地址0x0002,但0x0001地址中保存的"a"依舊存在,但已經(jīng)不再是a所指向的,a 已經(jīng)指向了其它地址。
             因此String的操作都是改變賦值地址而不是改變值操作。

          2. StringBuffer是可變類,和線程安全的字符串操作類,任何對它指向的字符串的操作都不會產(chǎn)生新的對象。 每個StringBuffer對象都有一定的緩沖區(qū)容量,當字符串大小沒有超過容量時,不會分配新的容量,當字符串大小超過容量時,會自動增加容量。

             StringBuffer buf=new StringBuffer(); //分配長16字節(jié)的字符緩沖區(qū)
             StringBuffer buf=new StringBuffer(512); //分配長512字節(jié)的字符緩沖區(qū)
             StringBuffer buf=new StringBuffer("this is a test")//在緩沖區(qū)中存放了字符串,并在后面預留了16字節(jié)的空緩沖區(qū)。

          3.StringBuffer
            StringBuffer和StringBuilder類功能基本相似,主要區(qū)別在于StringBuffer類的方法是多線程、安全的,而StringBuilder不是線程安全的,相比而言,StringBuilder類會略微快一點。對于經(jīng)常要改變值的字符串應該使用StringBuffer和StringBuilder類。

          4.線程安全
          StringBuffer 線程安全
          StringBuilder 線程不安全

          5.速度
          一般情況下,速度從快到慢:StringBuilder>StringBuffer>String,這種比較是相對的,不是絕對的。

          6.總結
          (1).如果要操作少量的數(shù)據(jù)用 = String
          (2).單線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuilder
          (3).多線程操作字符串緩沖區(qū) 下操作大量數(shù)據(jù) = StringBuffer


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           

          posts - 34, comments - 38, trackbacks - 0, articles - 0

          Copyright © 陳小東

          主站蜘蛛池模板: 云梦县| 乐至县| 当涂县| 舟曲县| 金山区| 宝应县| 济宁市| 永福县| 克拉玛依市| 桦川县| 永吉县| 闽侯县| 沂源县| 桓台县| 德阳市| 威海市| 焉耆| 沐川县| 万宁市| 太原市| 上林县| 宁蒗| 大田县| 兰溪市| 剑阁县| 女性| 大洼县| 湖北省| 沅陵县| 稻城县| 正安县| 内乡县| 老河口市| 隆安县| 鄢陵县| 长葛市| 紫云| 绍兴县| 美姑县| 正定县| 盐亭县|