使用isEqual测试NSNumber的相等性

时间:2018-09-26 20:12:15

标签: objective-c nsnumber

我的印象是,可以使用isEqual来测试NSNumber的值:

但是,当我使用以下代码测试整数值为38的NSNumber的值时,我得到的是false而不是true。我缺少这种微妙之处吗?

if ([self.adding isEqual:@38]) {
//they are equal
}
else {
//they are unequal
}

值得注意的是,当我使用([self.adding intValue]==38)时,确实得到了预期的结果。

在调试器中,NSNumber显示为int(38)

1 个答案:

答案 0 :(得分:1)

使用-isEqualToNumber:进行数字相等性测试,该测试本身与-compare:方法的相等性概念相关。

({NSNumber被实现为类集群。-isEqual:方法的胆量可能正在寻找其他细微之处,例如两个实例是来自同一实际类型还是其他,这可能很重要。在处理集合中的存储时,但不帮您检查38。这是您应该使用NSString的-isEqualToString:方法进行等效比较的相同原因)。