Objective-C相同值的三向比较结果为NO - 为什么?

时间:2011-12-09 14:14:01

标签: objective-c comparison boolean equality

考虑到所有三个变量具有相同的值,可以预期以下比较结果为YES:

NSUInteger count1 = 2;
NSUInteger count2 = 2;
NSUInteger count3 = 2;
BOOL countEqual = (count1 == count2 == count3);
// but: countEqual = NO

Alas countEqual是NO,我想更好地理解为什么以及这个特定问题是否也出现在C或C ++代码中?

我的猜测是:

(count1 == count2) --> YES (1)
(YES == count3) or (1 == count3) --> NO (0)

4 个答案:

答案 0 :(得分:7)

您的猜测完全正确,它将从第一次比较中获得结果,并将其与第三个值进行比较。要做到这一点,你需要做

countEqual = (count1 == count2) && (count1 == count3);

答案 1 :(得分:4)

其他海报已经提供了答案,所以我只引用确认它的规范的相关部分:

  

==(等于)和!=(不等于)运算符类似于关系运算符,除了它们的优先级较低。如果指定的关系为真,则每个运算符产生1,如果为假,则产生0。

平等是关联的,所以它被解释为:

count1 == count2 == count3
(count1 == count2) == count3
(1) == count3
0

答案 2 :(得分:1)

==之类的比较运算符与C语言和其他类C语言不同。

变化:

BOOL countEqual = (count1 == count2 == count3);

为:

BOOL countEqual = (count1 == count2 && count2 == count3);

答案 3 :(得分:0)

你猜对了。将第一次比较的结果与第三次值进行比较。这不是你想要的。