如果" a == b"比较两个NSString对象时为false

时间:2011-12-22 01:48:45

标签: objective-c cocoa cocoa-touch nsstring string-comparison

我有一个带有可访问方法的类,在调用时会传回NSString

[MyClass getMyString]

该类中的字符串变量实际上是在表的didSelectRowAtIndexPath:部分中分配的,如下所示:

myString = cell.textLabel.text;

当我通过调用该方法检索字符串时,我将其分配给调用它的类中的另一个字符串,并将其与我定义的字符串进行比较

NSString *mySecondString;
mySecondString = @"my value";

if(mySecondString == myString){
    i = 9;
}

我已逐步完成代码,每次评估if语句时,它都跳过i=9并转到下一个else if语句。为什么会这样?他们为什么不评价相同的价值?如果您在调试期间将光标悬停在每个值上,则会显示它们具有相同的值,但由于某种原因,代码没有像我期望的那样执行,并将9分配给i

有什么想法吗?

5 个答案:

答案 0 :(得分:17)

您假设C ==运算符执行字符串相等。它没有。它执行指针相等(在指针上调用时)。如果要进行真正的字符串相等测试,则需要使用-isEqual:方法(或者当您知道两个对象都是字符串时使用特化-isEqualToString:):

if ([mySecondString isEqualToString:myString]) {
    i = 9;
}

答案 1 :(得分:3)

您正在将指针与字符串进行比较,而不是字符串本身。您需要将代码更改为

if (if([mySecondString isEqualToString:myString]) {
    ....
}

答案 2 :(得分:2)

你不能用'=='来比较两个NSString

你应该使用[NSString isEqualToString:(NSString *)]来比较两个字符串

答案 3 :(得分:1)

您不能使用“==”比较两个字符串,这是针对int和其他值。 你可以使用下面的代码来比较两个字符串

if([Firststring isEqualToString:Secondstring]){

  NSLog(@"Hello this both string is same ");

}

答案 4 :(得分:1)

这是指针的基本概念,你不见了。 (YES,myStringmySecondString是指向字符串的指针)。

现在,if(mySecondString == myString)只有在指针指向同一位置时才会TRUE。 (在大多数情况下他们不会这样做)

你应该做if ([mySecondString isEqualToString:myString]),这将比较你们两个字符串的内容是否相等。