我有一个带有可访问方法的类,在调用时会传回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
。
有什么想法吗?
答案 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,myString
和mySecondString
是指向字符串的指针)。
现在,if(mySecondString == myString)
只有在指针指向同一位置时才会TRUE
。 (在大多数情况下他们不会这样做)
你应该做if ([mySecondString isEqualToString:myString])
,这将比较你们两个字符串的内容是否相等。