isEqualToString vs ==

时间:2014-04-10 21:50:09

标签: objective-c c

我是目标C(和C)的新手,今晚对这个比较感到困惑。

代码位于快速枚举循环中,变量为n和w。

破碎的代码片段是

if (n == w)

修复它是

if ([n isEqualToString:w])

我完全理解为什么第二个工作,因为我实际上比较了两个字符串,这将是使用的逻辑方法(只是花了我一段时间才找到它!) 但是,我不明白为什么第一个' =='比较不起作用,任何人都可以为我详细解释这一点,因为我无法找到任何好的参考资料。

非常感谢,

3 个答案:

答案 0 :(得分:0)

==运算符检查对象是否相等,这意味着两个实例引用同一个对象,而isEqualToString检查对象相似性。为了更好地解释:

NSString* a = [NSString stringWithString:@"a"];
NSString* b = [NSString stringWithString:@"a"];
NSString* c = a;
BOOL equality = a == b; //false
BOOL similarity = [a isEqualToString:b]; //true
equality = a == c; //true

编辑:感谢您的评论,不知道字符串文字被评估为同一个实例

答案 1 :(得分:0)

==比较指针(字符串的地址)isEqualToString比较字符串的CONTENTS。因此,无论字符串是否是相同的对象,如果它们相同,它将返回YES

答案 2 :(得分:-1)

拥有更多背景会很有帮助。请允许我假设您的'C'代码看起来像:

...
char *n = "String A";
char *w = "String B";

if(n == w)
...

在英语中,if语句要求:'n'是否指向与'w'相同的字符串? 在上述情况下,这总是错误的。

更有可能的是,您想确定'n'指向的字符串是否与'w'指向的字符串相同。如果是这样,您可以执行以下操作:

if(0 == strcmp(n,w))

如果'n'和'w'指向的字符串相同,则strcmp()函数返回零。