从containsObject浅谈到对象地址、isEqual和hash值

近期修正一个上个程序员写的代码bug,用到了containsObject这个方法,这是个数组对象方法,深究了一下,大概有以下几种用法,肯定有似懂非懂的同学,容我来解惑一二。

1、检测数组中是否存在某个字符串

 NSString *str1 = @"123";
 NSString *str2 = @"345";
 NSMutableString *str3 = [NSMutableString stringWithString:@"123"];
 NSArray *strArray = @[str1, str2, str3];
 NSMutableArray *testStrArray = [NSMutableArray array];
for (int i = 0; i<3; i++) {
    [testStrArray containsObject:strArray[i]]?:[testStrArray addObject:strArray[i]];
}

2、

LLZLabel *l1 = [[LLZLabel alloc] init];
l1.text = @"llz";
LLZLabel *l2 = [[LLZLabel alloc] init];
l2.text = @"llz";
NSUInteger sss1 = l1.hash;
NSLog(@"%zd",sss1);
NSUInteger sss2 = l2.hash;
NSLog(@"%zd",sss2);
NSMutableArray *testStrArray = [NSMutableArray array];
[testStrArray addObject:l1];
BOOL qqq = [testStrArray containsObject:l2];
NSLog(qqq?@"YES":@"NO");

每个对象都有一个hash值,一般来说不同对象就算内容一样,hash值也是不同的。但不同地址的字符串,如果内容一致,那么hash值也是一样的。而isEqual方法和containsObject方法比较的就是两个对象的hash值,通过上面的两个方法打印一下就能得出。(isEqual返回yes的情况说明两个对象的hash值相同,而两个对象的hash值相同并不能推导出isEqual返回yes)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,781评论 24 1,002
  • 前言 对数据的等同性判断包括对基本数据类型等同性的判断和对象等同性的判断。对基本数据类型等同性的判断是非常简单的,...
    VV木公子阅读 1,503评论 0 8
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,764评论 18 399
  • 摄影/Gujiu_顾九 文/Gujiu_顾九 在家中憋了许久,有些烦闷。周六的下午,阳光正好,暖风醺然,提议出去...
    Gujiu_顾九阅读 207评论 0 0
  • 前几天跟大家简单聊了下灯联网的相关技术,收获了不少阅读量,今天笔者再就灯联网的几个问题做深入探讨。 为什么选择灯作...
    美迪索科阅读 1,349评论 0 0