【概述】
做iOS开发的都知道:
<blockquote>
if(2 == a),用来判断值是否相等
[str1 isEqualToString:str2],用来判断字符串是否相等,</blockquote>
但是之前并没有研究过,它们具体都有什么区别,今天碰到了一个关于这个的bug,就来总结下。
</br>
【区别】
<blockquote>
OC中的对象,都是用指针表示
OC中方法的调用,是基于消息机制实现
</blockquote>
"==" / isEqualToString:
<blockquote>
"==" ,比较两个指针的值
isEqualToString,比较两个字符串是否相同
</blockquote>
"==" / isEqual:
<blockquote>
"==" ,是判断两个对象的引用(reference)是否一样,也就是内存地址是否一样。
isEqual ,判断是一个类方法,判断连个对象在类型和值上是否一样。
</blockquote>
is empty / isEqualToString
<blockquote>
[string isempty]判断字符串是不是null
[string isEqualToString:@""]判断是不是""
</blockquote>
isEqual / isEqualToString
<blockquote>
IsEqual 是 NSObject 的方法 ,而 isEqualToString 是 NSString 的方法
因此从继承关系角度来说isEqualToString 是 isEqual 的衍生方法
</blockquote>
isEqual,方法首先检查指针的等同性,相等直接返回YES,
然后是类的等同性,空或非同类对象直接返回NO,
最后调用对象的比较器进行比较。比较器的名称指示出参与比较的对象的类名称。若均相等,返回YESisEqualToString,在比较对象都是字符串的前提下, 直接判断字符串内容,比较对象不是字符串,报错。
</br>
参考资料:
http://blog.csdn.net/jerryvon/article/details/8224634
http://mobile.51cto.com/iphone-280494.htm
http://stackoverflow.com/questions/1112373/implementing-hash-isequal-isequalto-for-objective-c-collections?rq=1
——————————— 【 MadeBy 纪宝宝 】 ———————————