Objective-C中 ==、isEqual、isEqualToString判斷字符串相等



圖片發自簡書App


在判斷一個字符串類型的變量是否與某字符時相等,你可能寫下這樣一行代碼

    if (activityType == @"0"){} //activityType是某一個變量名

然后你會得到這樣一行黃色提醒

    Fixing “direct comparison of a string literal has undefined behavior”

原因在於

  • == :比較的是指針指向的地址,OC中的對象都是用指針表示的,但在這里並不能保證activityType0相等

那么很自然可以想到使用用isEqualisEqualToString方法,這兩者也是有區別的:

  • isEqualNSObject方法,官方文檔是這樣寫的

      Returns a Boolean value that indicates whether the receiver and a given object are equal. 返回一個bool值判斷兩個對象是否相等

    如果兩個對象是相等的,那么他們必須有相同的哈希值

  • isEqualToStringNSString方法,而NSString是繼承自NSObject的,所以isEqualToString應該是isEqual的衍生方法,是對isEqual的細分,它的官方文檔是這樣寫的

      Returns a Boolean value that indicates whether a given string is equal to the receiver using a literal Unicode-based comparison. 返回一個bool值判斷給出的字符串是否與已有的Unicode字符相同

    如果知道了兩個對象都是字符串,isEqualToStringisEqual要快

所以以上代碼應該寫成

    if (activityType isEqualToString @"0"){}



文/sealband(簡書作者)
原文鏈接:http://www.jianshu.com/p/2e70a7430362
著作權歸作者所有,轉載請聯系作者獲得授權,並標注“簡書作者”。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM