你应该使用'isEqual'还是'=='?

时间:2010-09-18 10:19:15

标签: iphone objective-c comparison equality equals-operator

我在这里看到了几个关于SO的问题,其中包括函数isEqual:而不是标准==

到目前为止,我只学会使用==,所以我想知道什么是更好用,各自的优点和缺点是什么?你应该什么时候使用它们?

谢谢。

2 个答案:

答案 0 :(得分:9)

他们做不同的事情;所以你需要使用适当的:

考虑一下,如果你愿意:

NSString *a = @"Hello!";
NSString *b = a;
NSString *c = [a mutableCopy];

if (a == b) NSLog(@"This prints");
if (b == c) NSLog(@"This doesn't");
if ([a isEqual:c]) NSLog(@"This does");

换句话说; ==只检查两个指针​​是否指向同一个地方,因此是同一个对象; isEqual:检查两个对象是否相等;在这种情况下,ab是相同的字符串,而c是一个等于a的新字符串,因为它在相同的顺序中具有相同的字符;但它有不同的类和不同的地址。

您几乎总是希望isEqual:用于对象,如果有对象,则可以使用更具体的比较器,如果它们属于同一类(例如isEqualToString:)。

另一方面,

==应该只用于整数数据类型。 (它们对于对象没什么意义,对于浮点数则更少。)

答案 1 :(得分:1)

isEqual将根据为接收器对象编写的方法比较对象

==比较对象的地址(或它们的C类型变量的值,如整数

这意味着说NSStrings ==比较地址但isEquals:将查看字符串对象的值,因此类似于strcmp

请注意,许多字符串都是实例化的,因此如果它们的数据相同,它们的地址是相同的,所以==似乎可以在测试用例中起作用。

相关问题