从containsObject 到 hash值

2019-07-23  本文已影响0人  克洛斯贝尔

曾经一直以为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

上一篇 下一篇

猜你喜欢

热点阅读