String.Empty是string類的一個靜態常量;
String.Empty和string=””區別不大,因為String.Empty的內部實現是:
public static readonly string Empty; //這就是String.Empty 那是只讀的String類的成員,也是string的變量的默認值是什么呢? //String的構造函數 static String(){ Empty = "";//Empty就是他"" WhitespaceChars = new char[] { '\t', '\n', '\v', '\f', '\r', ' ', '\x0085', '\x00a0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '', '\u2028', '\u2029', ' ', '' }; }
再看一段代碼:
string s1 = ""; string s2 = string.Empty; if (s1 == s2)
{ Console.WriteLine("一模一樣!"); } // 結果都是True Console.WriteLine("".Equals(string.Empty)); Console.WriteLine(object.ReferenceEquals(string.Empty, ""));
既然String.Empty和string=””一樣,同樣需要占用內存空間,為什么推薦優先使用String.Empty ?
string.Empty只是讓代碼好讀,防止代碼產生歧義,比如說:
string s = ""; string s = " "; 這個不細心看,很難看出是空字符串還是空格字符。
如果判斷一個字符串是否是空串,使用
if(s==String.Empty)和if(s==””)的效率是一樣的,但是最高效的寫法是if(s.Length==0)
string.IsNullOrEmpty的內部實現方式:
public static bool IsNullOrEmpty(string value)
{
if (value != null) { return (value.Length == 0); } return true; }
而string str=null則是表示str未指向任何對象。