这个问题与objc中的选择器isEqual
有关。
我知道在使用对象isEqual
时,他们比较了hash
,但是如何理解以下代码:
NSString *string = [NSString stringWithFormat:@"%d", 1];
NSLog(@"%d", [@"1" hash] == [string hash]); // output 1
我读取对象的哈希值不能相同,为什么输出为1?
答案 0 :(得分:3)
我知道在使用对象
isEqual
时,他们会比较hash
这不正确。 isEqual
在不使用hash
(通常)的情况下比较对象。
我读取对象的哈希值不能相同
同样不正确,对于相等的对象,必须必须,对于不相等的对象,可以相同。由于hash是一个int,因此只有2 ^ 32个可能的值,不足以使每个可能的对象都是唯一的(除非该对象本身等于32位或更少)。
关于hash
的唯一规则是:如果[a isEqual:b]
为真,则此必须也为真:[a hash] == [b hash]
。
因此,当你的两个字符串相等时,"1"
,那么哈希值也应该相等。