iPhone SDK:请解释为什么“nil ==”与“== nil”不同

时间:2010-06-19 17:23:39

标签: iphone c objective-c null

我已经对iPhone SDK进行了大约6个月的编程,但是对于一些事情我有点困惑......其中一个我在这里问:

为什么以下方面有所不同?

if (varOrObject == nil)
{

}

vs

if (nil == varOrObject)
{

}

来自perl背景,这让我感到困惑......

有人可以解释为什么这两个中的一个(第二个)是真的,而如果两个例程在代码中一个接一个地放置,则第一个不会。 varOrObject两个if语句之间的{{1}}不会发生变化。

没有具体的代码发生在这里,只是我在很多地方读过这两个陈述不同,但不是为什么。

提前致谢。

5 个答案:

答案 0 :(得分:9)

他们是一样的。您所读到的内容可能是在谈论如果您错误地将==写为=,前者会将值赋给变量而if条件将为false,而后者则为编译时错误:

if (variable = nil) // assigns nil to variable, not an error.

if (nil = variable) // compile time error

后者让你有机会在编译时纠正错误。

答案 1 :(得分:4)

如果您使用的是Objective-C ++,那么它们可能会有所不同,而您正在覆盖对象的'=='运算符。

答案 2 :(得分:2)

它们完全相同,只是风格差异。如果另一个是假的,那就不会是真的。

答案 3 :(得分:0)

如果建议您使用后者,那是因为如果您不小心输入=,第二个更容易捕获。否则,它们是相同的,你的书是错的。

答案 4 :(得分:0)

如果“==” - 运算符过载,它们只能是不同的。 假设有人为列表重新定义“==”,以便检查两个列表的内容而不是内存地址(如Java中的“equals()”。现在同一个人理论上可以定义“emptyList == NULL”

现在(emptyList == NULL)为true但是(NULL == emptyList)仍然是false。