曾经一直以为containsObject是比较内存地址的,直到最近才发现只是一个误解。
NSString *s = @"1";
NSString *ss = [NSMutableString stringWithFormat:@"%@",@"1"];
NSLog(@"hash %lu %p", (unsigned long)s.hash, s);
//hash 918 0x101306d48
NSLog(@"hash %lu %p", (unsigned long)s.hash, ss);
//hash 918 0x101306d48
NSLog(@"== %@", s == ss ? @"相等" : @"不等");
//== 不等
NSLog(@"isEqual %@", [s isEqual:ss] ? @"相等" : @"不等");
//isEqual 相等
NSArray *array = @[ss];
NSLog(@"containsObject %@", [array containsObject:s] ? @"包含" : @"不包含");
//containsObject 包含
翻翻资料,写写代码得知
== 比较的是内存地址是否相同
isEqual 先比较hash值,然后比较数据类型,都相同就是相同
containsObject 会调用isEqual
网友评论