国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C# > 正文

C#中String StringBuilder StringBuffer類(lèi)的用法

2020-01-24 00:41:00
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

     String類(lèi)

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

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

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

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

  StringBuilder

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

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

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

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

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

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

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大丰市| 伊吾县| 大连市| 年辖:市辖区| 通渭县| 山西省| 金乡县| 聂拉木县| 罗江县| 乐平市| 东城区| 柳州市| 云龙县| 务川| 高平市| 屏南县| 封开县| 藁城市| 铜陵市| 明光市| 大安市| 泰来县| 财经| 西昌市| 洪湖市| 通辽市| 十堰市| 峡江县| 房产| 洞头县| 韩城市| 车致| 讷河市| 松原市| 海门市| 泗洪县| 西盟| 屏山县| 吉安县| 澜沧| 池州市|