[英]Equals() vs Static string.Equals()
通過閱讀有關C#中的字符串比較的信息,我發現了比較2個字符串以查看它們是否相等的多種方法。
我習慣於==
來自c ++,但是我了解到,如果將對象與字符串進行比較,則==
默認為參考值(或類似值)。
然后對於Equals()
方法,可以說我有2個字符串。
string s1 = null;
string s2 = "Hello";
如果我做s1.Equals(s2);
我得到一個空引用異常,因為第一個字符串為空
但是如果我這樣做
string.equals(s1,s2);
它會簡單地返回false
,如果一個值是null
,如果這兩個值是null
,它將返回true
因為這兩個字符串將是這等於他們都是null
。
因此,有什么理由不總是使用string.equals()
方法。 另外還有一點,如果我鍵入string.equals()
在字符串中使用大寫S喜歡這個S tring.equals()
則仍然無線本地環路運行一樣的,如果我有它小寫,但IDE(視覺工作室2015年)會告訴我可以簡化,當我簡化時將其轉換為小寫字母s。 這是為什么?
根據MSDN , string.Equals
方法
確定兩個String對象是否具有相同的值。
這就是為什么string.equals(s1,s2);
在您的情況下將始終返回false,並且如果s1
和s2
均為null或具有相同的值,則將返回true。
還有另一件事是,如果我在像這樣的String.equals()的字符串中輸入帶有大寫S的string.equals(),則它的運行方式與小寫但與IDE相同(Visual Studio 2015)會告訴我它可以簡化,當我簡化時將其轉換為小寫字母s。 這是為什么?
該string
是C#原語,而System.String
或簡單String
是相應的FCL(框架類庫)類型。 就像int
和Int32
,其中int
是C#基元,而Int32
是相應的FLC類型。
兩種方法都執行以下步驟:
true
。 他們通過檢查對象引用來做到這一點(通過檢查(object)a==(object)b
做到這一點:兩個object
變量上的==
運算符僅檢查引用)。 請注意,如果兩個對象都為null
,則此步驟還返回true
。 null
(如果任何一個為null
,則返回false
) false
) StringComparison
類型)(注意:字節比較實現得非常好,即使對性能進行管理也不安全)代碼...但這是您不應該關心的實現細節) 是否使用一個(如果您確定實例不為null
)取決於您。 兩者基本上都執行相同的操作,並且性能相同。
您無法在null
實例上調用實例方法,這就是為什么它會為您拋出NullReferenceException
的原因……但是,您的實例為null
的事實可能很重要(取決於您的規范),您可能需要在null
之前檢查null
比較並采取相應措施(使用string.Equals
會將其隱藏起來,並且可能更容易出現錯誤)。 如果對您的規格要求不重要,那么使用一個或另一個僅僅是設計決定。
如果您有興趣,可以使用( source link )來實現兩種字符串類型的運算符==
:
public static bool operator == (String a, String b) {
return String.Equals(a, b);
}
所以做a == b
和做string.Equals(a,b)
至於String
和string
,前者是System.String
(它需要有一個using System;
在頂部,或指定整個System.String.Equals
),而后者是一個內置別名(它沒有要求using System;
頂部)。 您可以使用其中一種,它們的行為完全相同
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.