首頁 >後端開發 >C++ >C# 中的字串比較:何時「String.Equals()」和「==」可以互換?

C# 中的字串比較:何時「String.Equals()」和「==」可以互換?

Barbara Streisand
Barbara Streisand原創
2025-01-22 11:31:12590瀏覽

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

C# 字串比較的困惑:String.Equals() 方法和 == 運算子是否可互換?

在 C# 中,字串比較有時會產生令人意外的結果。一個常見的問題是 String.Equals() 方法和 == 等號運算子的行為是否完全相同。

考慮以下程式碼片段:

<code class="language-csharp">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</code>

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

String.Equals()== 之間的關鍵差異

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

  1. 類型特定實作:== 運算子根據物件的編譯時類型進行比較,而String.Equals() 是多態的,這表示它的實作取決於被比較物件的執行時間類型。
  2. 空值處理:== 運算子在比較空參考時不會拋出異常,而 String.Equals() 如果任何一個參數為空,則會拋出 NullReferenceException 異常。

示範差異的範例

為了說明這些差異,請考慮以下程式碼:

<code class="language-csharp">object x = new StringBuilder("hello").ToString();
object y = new StringBuilder("hello").ToString();

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

if (x == y) // False</code>

儘管 xy 值相同,但 == 運算子回傳 false,因為它根據物件的編譯時類型(object)進行比較,而這些類型是不同的。為了獲得正確的比較,必須將物件明確轉換為適當的類型(在本例中為 string)。

<code class="language-csharp">string xs = (string)x;
string ys = (string)y;

if (xs == ys) // True</code>

結論

雖然 String.Equals()== 運算子通常可以互換使用,但了解它們在實作和空值處理方面的細微差別非常重要。為了確保可靠一致的字串比較,通常建議使用 String.Equals() 方法,尤其是在比較不同類型的物件或處理空引用時。

以上是C# 中的字串比較:何時「String.Equals()」和「==」可以互換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn