比较两个NSString对象时,如果“a == b”为false

我有一个类的一个可访问的方法,传回一个NSString被调用。

 [MyClass getMyString] 

该类中的stringvariables实际上被分配在表的didSelectRowAtIndexPath:部分中,如下所示:

 myString = cell.textLabel.text; 

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

 NSString *mySecondString; mySecondString = @"my value"; if(mySecondString == myString){ i = 9; } 

我已经遍历代码,并且每次评估if语句时,都会跳过i=9并转到下一个else if语句。 为什么会这样? 为什么他们不评价是相同的价值? 如果你在debugging过程中将光标hover在每个值上,它们将显示它们具有相同的值,但是由于某种原因,代码没有如我所期望的那样执行,并将9赋给i

有什么想法吗?

你假设C ==操作符做string相等。 它不。 它做指针相等(当在指针上调用时)。 如果你想做一个真正的string相等性testing,你需要使用-isEqual:方法(或者当你知道两个对象都是string的时候,使用-isEqual:

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

您正在比较指向string的指针,而不是string本身。 你需要改变你的代码

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

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

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

你不能使用“==”比较这两个string,这是为int和其他值。 你可以使用下面的代码来比较两个string

if([Firststring isEqualToString:Secondstring]){

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

}

这是一个指针的基本概念,你错过了。 (是的, myStringmySecondString是指向string的指针)。

现在, if(mySecondString == myString)只有在两个指针指向相同的位置时才会if(mySecondString == myString) TRUE 。 (他们不会在大多数情况下)

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