您的位置:首页 > 移动开发 > Objective-C

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

2016-03-17 14:37 661 查看
在判断一个字符串类型的变量是否与某字符时相等,你可能写下这样一行代码
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字符相同
如果知道了两个对象都是字符串,
isEqualToString
isEqual
要快所以以上代码应该写成
if (activityType isEqualToString @"0"){}
总结:isEqual比较的是hash返回的值,而==只是简单的内存地址比较,大部份情况==为YES的,isEqual也为YES,如果isEqual为YES的不一定==也为YES。[/code]
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: