NSNumber *x = [NSNumber numberWithBool:NO];
NSNumber *y = [NSNumber numberWithUnsignedInt:0];
assert([x isEqual:y]);
assert(x==y);
第一个断言通过而第二个断言失败,为什么?因为他们的'objCType'不同? isEqual:和== operator?
的定义有什么区别为什么我这样做:我必须在某些后端存储一个布尔值,其API需要NSNumber而不是BOOL,所以我必须在存储它们之前将所有BOOL转换为NSNumber。我也需要转换反之亦然。
答案 0 :(得分:5)
==
运算符
==
运算符比较本机类型值以及对象指针以查看它们是否完全相同。如果您想查看两个本机类型值是否相等(1 == 1
,其中1是int
),这将非常有用。它还可以让您查看两个指针是否指向同一个对象。例如,如果你有这个:
NSNumber *x = [NSNumber numberWithBool:NO];
NSNumber *y = x;
然后x==y
为真,因为x
指向与y
相同的对象。
isEqual:
方法
isEqual:
方法只是比较两个NSObjects
,看它们是否是相同的值,但不一定是完全相同的对象。 [x isEqual:y]
要求“x
与y
相同?”,而x==y
请求“x
指向与y
相同的对象}?“
(请记住,当您使用*
时,您正在声明指针。)
<强>结论强>
由于您未使用本机类型的值或指针,因此应使用isEqual:
。 isEqual:
方法比较两个对象的值而不是对象本身。
此外,[NSNumber numberWithBool:NO]
和[NSNumber numberWithUnsignedInt:0]
实际上会产生相同的值,这就是isEqual:
返回true的原因。