C# 字串比較:string.Equals()
與 ==
的差異
在 C# 中,string.Equals()
方法和 ==
運算子看起來非常相似,但它們之間存在細微的差別,這些差別可能導致意想不到的結果。
多態性與運行時類型
一個關鍵的區別在於多態性。 Equals()
是一個多態方法,這意味著它的實作可以根據目標物件的運行時類型進行覆寫。相反,==
的實作僅由運算元的編譯時類型決定。當比較不同類型的物件時,這種差異就變得明顯了,因為目標物件的類別的 Equals()
實作將被調用,而 ==
將根據編譯時類型執行引用比較。
空值與異常
另一個差異是處理空值的方式。如果對空物件呼叫 Equals()
,它將拋出 NullReferenceException
異常,而 ==
將簡單地傳回 false
。當比較可能是空的物件時,這可能成為問題。為了避免這個問題,可以使用 object.Equals()
方法,該方法在呼叫 Equals()
之前檢查空值。
範例
考慮以下程式碼:
<code class="language-csharp">object x = new StringBuilder("hello").ToString(); object y = new StringBuilder("hello").ToString(); // Equals() 将比较值,考虑运行时类型 if (x.Equals(y)) // True // == 将执行引用比较,而不管运行时类型 if (x == y) // False</code>
在這個例子中,儘管 x
和 y
是不同類型的對象,Equals()
正確地比較了 x
和 y
的值。但是,==
執行參考比較,回傳 false
,因為它們不是同一個字串物件的實例。
結論
雖然 Equals()
和 ==
看起來相似,但它們的行為在關鍵方面有所不同。理解這些差異對於避免意外的字串比較和確保正確的物件相等性檢查至關重要。
以上是C# 中的 String.Equals() 與 ==:它們真的等價嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!