簡體   English   中英

string.Equals(“string”)和“String”.Equals(string)有什么區別?

[英]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")

如果strnull ,您將在運行時獲得異常。 通過做:

"abc".Equals(str)

如果strnull ,則會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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM