C# - String.Empty & ""

Posted on 2015-10-10

之前在使用 StyleCop 時,其中有一條規則是 使用 String.Empty 代替 "",一直不是很了解 (沒有研究) 為什麼要使用 String.Empty,而不要使用 "",後來無形中已經餋成習慣寫 Code 時就會直接寫 String.Empty 而不會寫 "",也一直沒有去探討。

前幾天公司裡面有個 C# Best Practice Test,而且裡面也有這一題,剛好有這個機會來研究一下。

註:如果不知道 StyleCop 是什麼的,可以參考官網。是一個很棒的 Teamwork 的工具

歸類出三點

  1. 效能上面兩個的差距可以說是微乎其微 (後面文章會深入比較效能)
  2. 一般來說大多數的人認為 String.Empty 看來會比較直覺 (不過也有人認為 "" 比較直覺)
  3. "" 打的不好的話裡面有可能會出現空白字元 (個人是覺得機率有點低,不過也是有可能發生)

效能比較

  • 原則上不管使用 String.Empty 或是 "" 都會分配記憶體,並沒有省下分配的記憶體

  • C# 在 String 的使用上會被優化,只是因為實現的方式不一樣,所以優化的方式也會不太一樣

    • String.Empty 在 C# 的內部的程式碼是 public static readonly String Empty (可參考 String source code),因為是 static 的,所以是 C# 語法級別的優化。當程式碼被編譯為 IL 時,才會對程式碼進行優化,即所有對 String 類的靜態字段 Empty 的訪問都會被指向同一引用
    • "" 是由 CLR 進行優化的。是通過 String Pool 的方式來避免重新建立相同的字串
  • 下圖為跑 10 億次的結果,原則上兩個是差不多的,有的時候會一樣,所以效能的差異上可以完全忽略

結論

看團隊的規範來使用,不過選擇使用 String.Empty 的比較多

參考連結