欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#中String StringBuilder StringBuffer類的用法

 更新時(shí)間:2017年05月03日 10:35:19   投稿:mrr  
這篇文章給大家簡(jiǎn)單介紹下C#中String StringBuilder StringBuffer三個(gè)類的用法,需要的的朋友參考下吧

String和StringBuilder和StringBuffer,這三個(gè)都是值得深究一翻的,可能很多人會(huì)說,實(shí)在不行的話,都全部用StringBuilder,啥事沒有,我不能說你的想法事不正確的,但是我可以給出更好的建議。下面簡(jiǎn)單介紹一下這三個(gè)類。

     String類

  在我們平時(shí)的使用當(dāng)中很容易不注意到的是,自己寫的代碼很容易發(fā)生了裝箱的操作(把值類型轉(zhuǎn)換為引用類型)。就比如很常見的,一個(gè)字符串拼接

  string str=9+"test"; 通過查看IL代碼可以知道這里發(fā)生了裝箱的操作。所以建議使用(在把值類型轉(zhuǎn)換為字符串的時(shí)候,記得用ToString方法)。所以平時(shí)寫代碼的時(shí)候,要注意下,裝箱和拆箱的操作(之后推出的泛型集合不就是為了解決裝箱和拆箱的操作)。裝箱操作的過程:把值類型放到托管堆里面分配內(nèi)存,除了值類型本身所分配的內(nèi)存外,內(nèi)存總量還要加上類型對(duì)象指針和同步索引塊所占用的內(nèi)存,之后再將值類型的值重新分配到堆內(nèi)存當(dāng)中,最后再返回引用類型的對(duì)象的地址。

 我們知道很多類型(值類型)都自帶了一個(gè)ToString方法,為毛用這個(gè)就不會(huì)發(fā)生裝箱操作呢,很簡(jiǎn)單的一個(gè)道理,不是有人和你說String是特殊的值類型(雖然他是引用類型),C#語(yǔ)言的設(shè)計(jì)者,為了做到這一點(diǎn),他想出了這個(gè)方法

把String對(duì)象,一旦賦值就不可改變(叫做字符串的恒定性),賦值完了之后,再對(duì)String進(jìn)行拼接,賦值等,都會(huì)再內(nèi)存里面重新分配一個(gè)新的內(nèi)存空間。

  StringBuilder

  基于上面的問題,string類在重新賦值會(huì)重新去分配內(nèi)存空間,所以為了解決這個(gè)問題,微軟推出了一個(gè)StringBuilder的類??梢钥纯碨tringBuilder類是如何做到不重新分配內(nèi)存的呢。

  通過閱讀StringBuiler類的實(shí)現(xiàn),我們可以發(fā)現(xiàn)

   internal const int DefaultCapacity = 0x10; StringBuilder類,默認(rèn)的大小是16,意思就是說我們?nèi)绻恢付⊿tringBuilder長(zhǎng)度,超過16個(gè)長(zhǎng)度,就會(huì)重新去分配一次內(nèi)存。具體實(shí)現(xiàn)可以看看StringBuilder類的Append源碼。

     從代碼里面可以看出,我們平時(shí)用StringBuilder的時(shí)候,一定要指定合適的長(zhǎng)度。源碼里面的fixed語(yǔ)句塊(通俗的來(lái)講,可以禁止垃圾回收把變量地址給回收了)。

     總結(jié):平時(shí)寫代碼的時(shí)候應(yīng)該要注意裝箱拆箱操作,注意stringBuilder的使用。

以上所述是小編給大家介紹的C#中String StringBuilder StringBuffer,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • C# 手動(dòng)/自動(dòng)保存圖片的實(shí)例代碼

    C# 手動(dòng)/自動(dòng)保存圖片的實(shí)例代碼

    C# 手動(dòng)/自動(dòng)保存圖片的實(shí)例代碼,需要的朋友可以參考一下
    2013-03-03
  • C#并查集(union-find)算法詳解

    C#并查集(union-find)算法詳解

    本文詳細(xì)講解了C#并查集(union-find)算法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • C#任務(wù)并行Parellel.For和Parallel.ForEach

    C#任務(wù)并行Parellel.For和Parallel.ForEach

    這篇文章介紹了C#任務(wù)并行Parellel.For和Parallel.ForEach的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C#中的位操作小結(jié)

    C#中的位操作小結(jié)

    在C#中位操作同C的位操作沒有什么區(qū)別,位操作的速度相對(duì)較快,而且如果熟練的話,處理起來(lái)也相對(duì)方便,特別是在一些權(quán)限等相關(guān)的設(shè)置中
    2014-01-01
  • C#轉(zhuǎn)換日期類型實(shí)例

    C#轉(zhuǎn)換日期類型實(shí)例

    這篇文章主要介紹了C#轉(zhuǎn)換日期類型的方法,以實(shí)例形式分析了將日期格式轉(zhuǎn)換為Unix時(shí)間戳與時(shí)區(qū)結(jié)合的形式,是比較實(shí)用的技巧,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • C#提取網(wǎng)頁(yè)中超鏈接link和text部分的方法

    C#提取網(wǎng)頁(yè)中超鏈接link和text部分的方法

    這篇文章主要介紹了C#提取網(wǎng)頁(yè)中超鏈接link和text部分的方法,涉及C#正則表達(dá)式及字符串操作相關(guān)技巧,需要的朋友可以參考下
    2016-02-02
  • C#去除DataTable重復(fù)數(shù)據(jù)的三種方法

    C#去除DataTable重復(fù)數(shù)據(jù)的三種方法

    這篇文章主要介紹了C#去除DataTable重復(fù)數(shù)據(jù)的三種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Unity中 ShaderGraph 實(shí)現(xiàn)旋渦傳送門效果入門級(jí)教程(推薦)

    Unity中 ShaderGraph 實(shí)現(xiàn)旋渦傳送門效果入門級(jí)教程(推薦)

    通過Twirl 旋轉(zhuǎn)節(jié)點(diǎn)對(duì)Gradient Noise 梯度噪聲節(jié)點(diǎn)進(jìn)行操作,就可得到一個(gè)旋轉(zhuǎn)的旋渦效果。具體實(shí)現(xiàn)代碼跟隨小編一起通過本文學(xué)習(xí)下吧
    2021-07-07
  • C#獲取真實(shí)IP地址(IP轉(zhuǎn)為長(zhǎng)整形、判斷是否內(nèi)網(wǎng)IP的方法)

    C#獲取真實(shí)IP地址(IP轉(zhuǎn)為長(zhǎng)整形、判斷是否內(nèi)網(wǎng)IP的方法)

    這篇文章主要介紹了C#獲取真實(shí)IP地址的實(shí)現(xiàn)代碼,包含把IP轉(zhuǎn)為長(zhǎng)整形、判斷是否是私網(wǎng)、內(nèi)網(wǎng)IP的方法,需要的朋友可以參考下
    2014-08-08
  • C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡(jiǎn)單使用

    C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡(jiǎn)單使用

    這篇文章主要介紹了C#中BitConverter.ToUInt16()和BitConverter.ToString()的簡(jiǎn)單使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評(píng)論