[英]What is the difference in string.Equals(“string”) and “String”.Equals(string)?
以下兩行代碼比較字符串值是否有任何區別。
string str = "abc";
if(str.Equals("abc"))
和
if("abc".Equals(str))
在第一行中,我在字符串變量上調用equals方法,將其與字符串文字進行比較。 第二行反之亦然。 它只是編碼風格的差異,或者編譯器處理這兩個語句的方式有所不同。
唯一的區別是,在第一種情況下,當你這樣做時:
str.Equals("abc")
如果str
為null
,您將在運行時獲得異常。 通過做:
"abc".Equals(str)
如果str
為null
,則會false
。
不同之處在於,在第二個示例中,您永遠不會得到NullReferenceException
因為文字不能為null。
要添加到其他答案:靜態string.Equals("abc", str)
方法總是避免觸發空引用異常,無論您傳遞兩個字符串的順序如何。
正如mmyers所說,你的第二個例子不會拋出NullReferenceException
,同時允許程序“顯示”無錯運行,可能會導致意外的結果。
是的,編譯器處理語句的方式是不同的。 大多數語言中String的函數equals遵循相同的guidlines。 這是一個半字節:
override def Equals(that:String):Boolean //Should override Object.Equals
if(that==null) return false
for i from 0 to this.length
if(!this(i).Equals(that(i))) return false
return true
通常情況下,該方法將最前一頁檢查這是一個字符串,並且此和具有相同的長度。
正如其他人所指出的那樣,你可以看到,如果為null
,則該方法返回false 。 另一方面,該方法是String的一部分,因此無法在null
上調用它。 這就是為什么在你的exampleif str為null時,你會得到一個NullReferenceException
。
話雖如此,如果您知道兩個變量都是相同長度的非空字符串,則兩個語句將在同一時間內評估為相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.