日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

string.empty , , null 以及性能的比较

發布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 string.empty , , null 以及性能的比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

一:這種結論,個人覺得仍然存疑?
http://www.cnblogs.com/wangshuai901/archive/2012/05/06/2485657.html?
1.null?

?? null 關鍵字是表示不引用任何對象的空引用的文字值。null 是引用類型變量的默認值。那么也只有引用型的變量可以為NULL,如果 int i=null,的話,是不可以的,因為Int是值類型的。?

2.,""和String.Empty?

?? 這兩個都是表示空字符串。只不過""理論上重新開辟內存空間,而String.Empty指向一處已分配好的內存空間。不過優化器會優化的!?



判定為空字符串的幾種寫法,按照性能從高到低的順序是:?

s.Length == 0????? 優于 s == string.Empty????? 優于 s == ""?



關于String.Empty和Null的問題是這樣的,這兩個都是表示空字符串,其中有一個重點是string str1= String.Empty和 string str2=null 的區別,這樣定義后,str1是一個空字符串,空字符串是一個特殊的字符串,只不過這個字符串的值為空,在內存中是有準確的指向的,string str2=null,這樣定義后,只是定義了一個string 類的引用,str2并沒有指向任何地方,在使用前如果不實例化的話,都將報錯。?


二 比較贊同?
string.Empty與""存儲及性能對比?




首先,看一下String類?

一、String類[只展示探討部分]?

public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>?
{?

public static readonly string Empty;?

static String()?
{?
??? Empty = "";?
??? return;?
}?

[MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical]?
public extern String(char[] value);?



??

}?

實例化某個string對象,有兩大種方式,一個需要new String(),一個不需要new,例如:?

<1>調用基本構造函數:?

【C#】:? string str=new string(new char[]{'a','b','c'});?

【IL】:?? L_0012: newobj instance void [mscorlib]System.String::.ctor(char[])?
<2>直接賦值:?

【C#】:string str="abc";?

【IL】: L_0018: ldstr “abc”?

在<1>中,是很平常的實例化方式,而在<2>中生成的IL代碼中并沒有出現newobj操作符,但出現了ldstr(推送對元數據中存儲的字符串的新對象引用)。關于lbstr這種實例化string的方式,是一種駐留機制,即:字符串值相同的只實例化一次(在內存中分配一次空間),其它相同的只是統一指向第一次分配的空間。每次string str="字符串",都會從字符串駐留池中取,如果有,直接使用原來的,沒有則創建新的實例。?



二、Empty與“”差異分析?

public static readonly string Empty;?
?????? static String()?
??????? {?
????????? Empty = "";?
????????? return;?
??????? }?
? 所以,當第一次實例化string類時,靜態構造函數就初始化Empty,且以后直接獲取只讀Empty值。?
? 例如:?
? string str=string.Empty;//如果這是第一次使用string類,調用靜態構造函數,初始化Empty,在堆中,開辟某一空間,[000001]保存值為“”;?
? string str2=string.Empty//這是第二次使用,所以直接從內存讀取到并賦值,指向原始空值堆空間[00000001]。?
??
? 而直接賦值 str="";則會:?
? 例如:?
? string str=“”; //如果是第一次使用string類,(結合上文string類介紹,ldstr)如同普通類,構造函數 string str=new string(char[]{''});在堆中,開辟某一空間,[000001]保存值為“”;?
? string str2=""; //這是第二次使用,(結合上文string類介紹,ldstr).NET對string有駐留機制處理,即相同的字符串值,則會繼續使用原來堆中的值數據,?
????????????????????? //當然,這個過程必然會經過一系列的處理,消耗一定的性能!!!?

三、分析總結?

<1>在內存分配上:?

string.Empty與“”,沒有差別。都是一個系統上,""值對象只有一個!!!?

<2>在性能上:?

string.Empty高,不需要在駐留機制上做處理。?

轉載于:https://www.cnblogs.com/min-min-min/p/6251512.html

總結

以上是生活随笔為你收集整理的string.empty , , null 以及性能的比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。