比较两个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 ");
}
这是一个指针的基本概念,你错过了。 (是的, myString
和mySecondString
是指向string的指针)。
现在, if(mySecondString == myString)
只有在两个指针指向相同的位置时才会if(mySecondString == myString)
TRUE
。 (他们不会在大多数情况下)
你应该这样做if ([mySecondString isEqualToString:myString])
,这将比较你的两个string的内容是否相等。