亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

string、Empty和null三者的區別

2019-11-17 02:06:39
字體:
來源:轉載
供稿:網友

string、Empty和null三者的區別

這是一個及其常見的問題,網上已經有關于這個問題的很多討論。但是我覺得都是不求甚解,有一些還是在誤導別人。下面我來說下我對這三者的理解,如有錯誤的地方請大家及時指正。

  一:""與string.Empty我認為是一樣的。網上有一篇被轉載了幾十遍的文章是這樣說的string.Empty 不分配存儲空間,"" 分配一個長度為空的存儲空間,我認為這句話是錯誤并且含糊不清的。

  1、實際上Empty是string類中的一個靜態的只讀字段,他的定義是這樣的:

  public static readonly String Empty = "";

  也就是說string.Empty的內部實現是等于””的。

  2、我要反駁string.Empty 不分配存儲空間,"" 分配一個長度為空的存儲空間這個觀點。首先string.Empty與""都會分配存儲空間,具體的說是都會在內存的棧和堆上分配存儲空間。

  有一點先說明一下,引用類型是將對象是實際數據保存在堆上, 將對象在堆上的地址保存在棧上。因此string.Empty與””都會在棧上保存一個地址這個地址占4字節,指向內存堆中的某個長度為0的空間,這個空 間保存的是string.Empty的實際值。這個我可以用VS2010跟蹤下內存給大家演示。

  上圖中的0x01e81228即是變量str在棧中存儲的地址。

  對于"",請看下圖

  這個圖的效果跟上圖是一樣的,也就是說””也是在棧上保存了一個地址。

  3、CLR會對字符串進行優化,所以””和string.Empty也都會被優化。

  聲明如下兩個變量

  string str1=””;

  string str2=””;

  str1與str2的引用會是相同的也就是str1與str2在棧上保存的地址上相同的。請看下圖

上圖是str1的地址。 上圖是str2的地址。

  可見str1于str2的地址是相同的,也就是說str1會在堆上占用一個長度為0的空間,而str2不會在堆上開辟新的空間, str2于str1在堆上共享同一空間。

  同理對于

  string str3=string.Empty;

  string str4= string.Empty;

  str3與str4的地址也是相同的。也是在內存堆上共享同一空間。如下圖

上圖是str3的地址。         上圖是str4的地址。

  4、如果非要說””與string.Empty有什么不同的話,我覺得1是寫法不一樣,string.Empty看起來好看~!~。2是在優化 方面稍有差別。string.Empty于c#對””在語法級別的優化。這點可以通過string.Empty的內部實現看出來。

  public static readonly String Empty = "";

  也就是說””是通過CLR進行優化的,CLR會維護一個字符串池,以防在堆中創建重復的字符串。而string.Empty是一種c#語法級別 的優化,是在C#編譯器將代碼編譯為IL(即MSIL)時進行了優化,即所有對string類的靜態字段Empty的訪問都會被指向同一引用,以節省內存 空間。

  所以對””的優化更依賴CLR。

  給大家看一下二者編譯后的IL代碼:

  string str1=””; 編譯后如下:

  ldstr "" //從字符串池中取出一個””(實際上取的是地址)

  stfld string ClassLibrary1.Class1::str1 //將””賦給str1(實際上賦的是地址)

  string str2=string.Empty; 編譯后如下:

  ldsfld string [mscorlib]System.String::Empty//取得string類的靜態字段Empty(實際上取的是地址)

  stfld string ClassLibrary1.Class1::str2//將Empty賦給str2(實際上賦的是地址)

  總結:說了這么一大推我自己都覺得羅嗦,而且初學者朋友可能會看不懂。本人語文學的不好,表達能力一般還請大家諒解,下面我會挑要害來說。

  “”與string.Empty在用法與性能上基本沒區別。string.Empty是在語法級別對””的優化。

  二、string.Empty與null的區別

  因為string.Empty與””基本是一樣的,所以string.Empty與null的區別也就代表了””與null的區別。

  1、 那就是string.Empty會在堆上占用一個長度為0的空間,而null不會。具體內容如下:

  string str1=””;

  string str2=null;

  如剛才所說str1會在棧上保存一個地址,這個地址占4字節,指向內存堆中的某個長度為0的空間,這個空間保存的是str1的實際值。

  str2同樣會在棧上保存一個地址,這個地址也占4字節,但是這個地址是沒有明確指向的,它哪也不指,其內容為0x00000000。如下圖


上一篇:多線程與異步的區別

下一篇:關于jquery

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久亚洲精品视频| 成人福利在线视频| 国产欧美一区二区三区在线| 亚洲香蕉成视频在线观看| 欧美巨猛xxxx猛交黑人97人| 国产精品亚洲美女av网站| 久久亚洲精品中文字幕冲田杏梨| 伊人青青综合网站| 国产精品6699| 高清欧美性猛交xxxx黑人猛交| 国产亚洲综合久久| 欧美大尺度在线观看| 91精品在线一区| 日韩国产高清视频在线| 欧美—级a级欧美特级ar全黄| 最近更新的2019中文字幕| 国产综合久久久久| 18一19gay欧美视频网站| 国产手机视频精品| 欧美黑人巨大精品一区二区| 日韩经典中文字幕在线观看| 欧美黑人xxxⅹ高潮交| 最近2019年日本中文免费字幕| 97色伦亚洲国产| 国产美女91呻吟求| 日韩免费在线看| 国产精品久在线观看| 日韩在线视频二区| 国产精品91一区| 欧美激情第一页xxx| 最近中文字幕2019免费| 亚洲高清久久网| 欧美韩日一区二区| 日韩电影大全免费观看2023年上| 亚洲美女性生活视频| 日韩成人xxxx| 尤物yw午夜国产精品视频| 日韩有码在线电影| 久久久久久久999精品视频| 97人人爽人人喊人人模波多| 国产精品欧美激情| 欧美激情一级欧美精品| 精品中文字幕在线| 日韩精品免费在线视频| 国产精品久久色| 中文字幕国产日韩| 亚洲四色影视在线观看| 日韩av三级在线观看| 久久久噜噜噜久久| 国产欧美一区二区三区四区| 国产精品美女免费视频| 成人黄色av免费在线观看| 欧美国产日韩免费| 欧美黑人视频一区| 久久国产精品久久久久久久久久| 亚洲美女av电影| 欧美激情xxxx性bbbb| 亚洲女人初尝黑人巨大| 日韩中文字幕视频在线| 久久成人精品一区二区三区| 亚洲影视中文字幕| 日韩电影免费观看在线| 色播久久人人爽人人爽人人片视av| 日本国产精品视频| 亚洲福利视频专区| 热久久这里只有精品| 亚洲美女自拍视频| 国产视频亚洲视频| 午夜精品一区二区三区在线播放| 久久伊人精品一区二区三区| 国产91在线高潮白浆在线观看| 国产精品专区一| 亚洲欧美日韩高清| 日韩视频免费大全中文字幕| 国产啪精品视频| 日韩欧美精品免费在线| 国产成人精品视频在线观看| 搡老女人一区二区三区视频tv| 免费99精品国产自在在线| 久久久久久久久久久国产| 国产a级全部精品| 色偷偷偷综合中文字幕;dd| 午夜精品久久久久久久99热浪潮| 精品动漫一区二区三区| 中文字幕欧美精品在线| 久久69精品久久久久久国产越南| 中文字幕不卡在线视频极品| 91极品视频在线| 亚洲午夜精品视频| 日韩色av导航| 午夜精品久久久久久久白皮肤| 97国产精品视频人人做人人爱| 亚洲欧洲高清在线| 国产成人免费av电影| 欧美整片在线观看| 久久久久久久久久久成人| 亚洲福利精品在线| 成人xxxx视频| 久久精品福利视频| 亚洲第一av网| 国产午夜精品久久久| 亚洲天堂2020| 久久香蕉精品香蕉| 国产ts人妖一区二区三区| 亚洲老板91色精品久久| 久久久爽爽爽美女图片| 欧美成人h版在线观看| 69久久夜色精品国产69| 国产精品毛片a∨一区二区三区|国| 亚洲黄色www| 日本高清+成人网在线观看| 日韩欧美在线播放| 成人黄色av免费在线观看| 欧美视频免费在线| 成人网址在线观看| 亚洲精品视频免费| 亚洲人成在线观| 久久亚洲精品网站| 久精品免费视频| 亚洲电影中文字幕| 色综合影院在线| 91精品视频在线免费观看| 国产精品久久久久久久久久99| 国产九九精品视频| 国产精品福利无圣光在线一区| 在线播放精品一区二区三区| 亚洲美女精品久久| 狠狠色香婷婷久久亚洲精品| 精品国模在线视频| 亚洲一区二区免费| 久久伊人色综合| 日韩精品欧美激情| 国产欧美一区二区三区久久人妖| 韩剧1988在线观看免费完整版| 欧美色道久久88综合亚洲精品| 97视频在线观看播放| 国产婷婷成人久久av免费高清| 亚洲国产精品嫩草影院久久| 国产精品久久久久av免费| 亚洲国产天堂久久综合网| 亚洲国产一区自拍| 亚洲综合中文字幕68页| 2020国产精品视频| 亚洲成人激情视频| 欧洲亚洲妇女av| 日韩精品有码在线观看| xxxxxxxxx欧美| 亚洲欧洲成视频免费观看| 91美女高潮出水| 97欧美精品一区二区三区| 国产裸体写真av一区二区| 欧美二区在线播放| 日本人成精品视频在线| 久久久久久久一区二区| 欧美成人免费一级人片100| 91精品国产综合久久香蕉922| 在线播放日韩精品| 国产成人精品视频在线观看| 一区二区三区视频在线| 国产精品黄视频| 日韩视频在线免费| 精品中文字幕在线2019| 91在线看www| 中文字幕不卡在线视频极品|