簡體   English   中英

使用==或Equals進行字符串比較

[英]Using == or Equals for string comparison

在某些語言(例如C ++)中,您不能使用==等運算符進行字符串比較,因為它會比較字符串對象的地址,而不是字符串本身。 但是,在C#中,您可以使用==來比較字符串,它實際上會比較字符串的內容。 但是還有字符串函數來處理這種比較,所以我的問題是; 你應該?

鑒於兩個字符串:

string aa = "aa"; 
string bb = "bb";

你應該像這樣比較它們:

bool areEqual = (aa == bb); 

或者你應該使用Equal函數,如下所示:

bool areEqual = aa.Equals(bb); 

反正有技術差異嗎? 或者最佳實踐的合理論據?

這是運營商的實施:

    public static bool operator == (String a, String b) {
       return String.Equals(a, b);
    }

不要為此失眠。

我不會用:

aa.Equals(bb)

除非我知道 aa 不可能是null。 我可能會用:

string.Equals(aa,bb)

但我主要使用它我想使用一種特定的StringComparison模式(不變量,序數,不區分大小寫等)。 雖然我也可以使用StringComparer實現,因為它們更容易抽象(例如,傳遞給Dictionary<string, Foo>以獲取不區分大小寫的序數字典)。 對於一般用途,

a == b

很好。

沒有技術差異(除非aa為空)。 使用任何看起來更好的東西。 在我看來,使用運算符重載使代碼更清晰。

在需要(或將來可能需要)其他參數時使用函數(如在CompareTo()中)

最佳實踐,我傾向於總是使用Equals()函數進行字符串比較。 當其他人讀取您特別想要比較字符串的代碼時,這就很清楚了。

一般來說,==做指針相等,而.equals檢查屬性是否相等。 所以,如果你做了類似的事情

a = 'a';
b = 'a';
bool c = (a == b);
bool d = (a.Equals(b))

那么c應該返回false而d應該是true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM