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

图片发自简书App


在判断一个字符串类型的变量是否与某字符时相等,你可能写下这样一行代码

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


然后你会得到这样一行黄色提醒

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


原因在于

  • ​==​​​ :比较的是指针指向的地址,OC中的对象都是用指针表示的,但在这里并不能保证​​activityType​​​与​​0​​相等

那么很自然可以想到使用用​​isEqual​​​或​​isEqualToString​​方法,这两者也是有区别的:

  • ​isEqual​​:​​NSObject​​方法,官方文档是这样写的
    ​ Returns a Boolean value that indicates whether the receiver and a given object are equal. 返回一个bool值判断两个对象是否相等​ ​如果两个对象是相等的,那么他们必须有相同的哈希值
  • ​isEqualToString​​:​​NSString​​方法,而​​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(简书作者)


著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。