<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          剖析String、StringBuffer與StringBuilder底層區(qū)別(面試簡潔篇)

          共 767字,需瀏覽 2分鐘

           ·

          2021-06-06 14:28

          問題源頭

          這個(gè)問題說實(shí)話,我是被公司老板反問過的,吃過虧的。所以專門研究了一下并且分享給不懂這塊知識點(diǎn)的人

          代碼底層

          如下圖所示,簡單介紹一下

          • String是一個(gè)變量,它是不可變的

          • StringBuilder,StringBuffer是可變的

          • StringBuilder是線程不安全的,也就是說它的代碼底層實(shí)現(xiàn)就是每個(gè)函數(shù)都沒有加 synchronized,這就導(dǎo)致了線程不安全,反而效率更快

          • StringBuffer是線程安全的,也就是說它的代碼底層實(shí)現(xiàn)久是每個(gè)函數(shù)都加了synchronized,這就導(dǎo)致了效率比較慢的原因

          • 上面提到了可變的與不可變的,不懂的話應(yīng)該抽象不出來具體的效果,我畫個(gè)圖一看便知。
            13cd65a61d9e3a6e8ac1b2eeb0525c6a.webp

          string 數(shù)據(jù)+=流程


          string+=的流程是這樣的,它不會在后面直接添加一個(gè)字符串,而是通過新開辟一個(gè)字符串的形式,然后把第一個(gè) 第二個(gè)拼湊在一起,然后把地址引用調(diào)換到最終的字符串結(jié)果地址。

          對于小項(xiàng)目操作來說的確沒啥多大區(qū)別,一旦上了規(guī)模的項(xiàng)目,如果還是這樣寫的話這就導(dǎo)致了,循環(huán)拼接的話導(dǎo)致大量的新建無用的變量對象,浪費(fèi)內(nèi)存空間,很容易OOM
          b79f55b73742676c71cda3a607536428.webp

          StringBuilder,StringBuffer 數(shù)據(jù)+=就是在后面直接追加了,不會再創(chuàng)建變量了

          總結(jié)應(yīng)用

          簡單來說,

          • 首選效率用StringBuilder,

          • 首先安全用StringBuffer ,

          • 多并發(fā)情況下首選StringBuffer,

          • 單線程操作下首選StringBuilder,

          • 至于sting在比較多的SQL拼接或者循環(huán)拼接中是不建議使用的!

          • 還有一點(diǎn)比較重要的話,StringBuilder,StringBuffer 經(jīng)過編輯器編譯之后你會發(fā)現(xiàn)最后都會是一個(gè)string字符串,首選前面兩個(gè)只是減少內(nèi)存的無用創(chuàng)建


          瀏覽 93
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天干天天射天天干 | 99999亚洲| 91精品老司机 | 大鸡巴在线视频观看 | 亚洲AV无码高清 |