iOS 中的“==”与“isEqual:”

Objective-C中判断两个变量是否相等有两种方式,一种是利用“==”直接比较,另一种就是“isEqual”方法,下面是它们的介绍:

"=="方法:
当使用==来判断两个变量是否相等的时候,如果是基本类型变量,且都是数值型(类型可以不同),则只要值相等,就会返回真;
如果是两个指针类型变量【例如OC对象】,则必须是两个指针变量保存的内存地址相同才会返回真,且如果使用这种方法判断两个没有继承关系的指针变量就会提示警告:Comparison of distinct pointer types ('XXXX' and 'YYYY')

“isEqual”方法:
这个方法是NSObject类提供的一个实例方法,因此,所有指针变量都可以调用该方法来判断是否与其他指针变量相等。但这个方法判断两个对象相等的标准与“==”符号没有区别,同样要求两个指针变量指向同一个对象才会返回真。因此,这个NSObject类提供“isEqual”实例方法实际上没有太大意义。

不过需要特别提到的是NSString已经重写了NSObject的“isEqual”方法,判断标准不再是两个指针变量保存的内存地址相同返回真,而是只要两个字符串包含的字符序列相同就会返回真,否则假

验证:
我们通过两种方法来创建字符串,如下:


iOS 中的“==”与“isEqual:”_第1张图片
字符串比较.png

原因:
在上图中使用了两种创建方式,第一个是字符串字面量创建方式,第二种是运行时创建方式*,这两个字符串创建方式不同,地址不同,保存的区域也不同,第一种保存在常量区,第二种保存在运行时内存区【即堆内存】

注:重写“isEqual”方法就是提供自定义的相等标准,由此,我们可以使一个对象与任意对象比较时都返回真,如下重写

iOS 中的“==”与“isEqual:”_第2张图片
isEqual.png

iOS 中的“==”与“isEqual:”_第3张图片
Test.png

你可能感兴趣的:(iOS 中的“==”与“isEqual:”)