2011-12-22 52 views
6

我有一个类,其中有一个可访问的方法,调用时返回NSString如果比较两个NSString对象时“a == b”为false

myString = cell.textLabel.text; 

当我通过调用该方法来检索该字符串,我把它分配给另一个字符串:

[MyClass getMyString] 

在类的字符串变量实际上是在一个表像这样的didSelectRowAtIndexPath:部分分配调用它,并将它与我已经定义

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

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

我已经通过代码,并在每次评估,如果语句时踩串类,IT方面kips正好通过i=9并转到下一个else if声明。为什么会这样?他们为什么不评估价值相同?如果在调试过程中将光标悬停在每个值上,它们将显示它们具有相同的值,但代码由于某种原因没有按照我的预期执行,并将9指定为i

有什么想法?

+0

我很惊讶,在这个网站上搜索没有带来任何结果。这个问题过去曾多次提出并回答过。 – dreamlax 2011-12-22 02:09:50

+0

也许我没有问过这个问题,当我搜索之前,我问了...... - 看到很多处理CFString并将其分配给NSString的问题,但没有看到Kevin Ballard在下面快速回答的问题。谢谢! – MeisterPlans 2011-12-22 02:49:20

+0

[了解NSString比较]的可能的重复(http://stackoverflow.com/questions/3703554/understanding-nsstring-comparison) – 2015-04-01 19:00:51

回答

17

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

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

是的!!!谢谢!!完全是这个问题! – MeisterPlans 2011-12-22 01:54:06

2

你不能用“==”来比较两个的NSString

你应该使用[的NSString isEqualToString:(的NSString *)]来

3

你比较指针比较两个字符串,字符串,而不是字符串本身。您需要将您的代码更改为

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

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

如果([Firststring isEqualToString:Secondstring]){

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

}

1

这是指针的基本概念,你缺少。 (是的,myStringmySecondString是指向字符串的指针)。

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

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