」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > C#字符串比較:String.Equals()和==何時等效?

C#字符串比較:String.Equals()和==何時等效?

發佈於2025-03-12
瀏覽:264

String Comparison in C#: When Are `String.Equals()` and `==` Interchangeable?

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

儘管 stvi.Header 都包含相同的值 "Category",但 == 運算符返回 false,而 String.Equals() 方法返回 true。這就提出了一個問題:為什麼這兩種比較方法會產生不同的結果?

String.Equals()== 之間的關鍵區別

String.Equals()== 運算符之間有兩個根本區別:

  1. 類型特定實現:== 運算符根據對象的編譯時類型進行比較,而 String.Equals() 是多態的,這意味著它的實現取決於被比較對象的運行時類型。
  2. 空值處理:== 運算符在比較空引用時不會拋出異常,而 String.Equals() 如果任何一個參數為空,則會拋出 NullReferenceException 異常。

演示差異的示例

為了說明這些差異,考慮以下代碼:

object x = new StringBuilder("hello").ToString();
object y = new StringBuilder("hello").ToString();

if (x.Equals(y)) // True

if (x == y) // False

儘管 xy 值相同,但 == 運算符返回 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