C# 字符串比較的困惑:String.Equals()
方法和 ==
運算符是否可互換?
在 C# 中,字符串比較有時會產生令人意外的結果。一個常見的問題是 String.Equals()
方法和 ==
等號運算符的行為是否完全相同。
考慮以下代碼片段:
string s = "Category";
TreeViewItem tvi = new TreeViewItem();
tvi.Header = "Category";
Console.WriteLine(s == tvi.Header); // false
Console.WriteLine(s.Equals(tvi.Header)); // true
Console.WriteLine(s == tvi.Header.ToString()); // true
儘管 s
和 tvi.Header
都包含相同的值 "Category",但 ==
運算符返回 false
,而 String.Equals()
方法返回 true
。這就提出了一個問題:為什麼這兩種比較方法會產生不同的結果?
String.Equals()
和 ==
之間的關鍵區別
String.Equals()
和 ==
運算符之間有兩個根本區別:
==
運算符根據對象的編譯時類型進行比較,而 String.Equals()
是多態的,這意味著它的實現取決於被比較對象的運行時類型。 ==
運算符在比較空引用時不會拋出異常,而 String.Equals()
如果任何一個參數為空,則會拋出 NullReferenceException
異常。 演示差異的示例
為了說明這些差異,考慮以下代碼:
object x = new StringBuilder("hello").ToString();
object y = new StringBuilder("hello").ToString();
if (x.Equals(y)) // True
if (x == y) // False
儘管 x
和 y
值相同,但 ==
運算符返回 false
,因為它根據對象的編譯時類型(object
)進行比較,而這些類型是不同的。為了獲得正確的比較,必須將對象顯式轉換為適當的類型(在本例中為 string
)。
string xs = (string)x;
string ys = (string)y;
if (xs == ys) // True
結論
雖然 String.Equals()
和 ==
運算符通常可以互換使用,但了解它們在實現和空值處理方面的細微差別非常重要。為了確保可靠一致的字符串比較,通常建議使用 String.Equals()
方法,尤其是在比較不同類型的對像或處理空引用時。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3