2011-12-22 50 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]),這將比較你的兩個字符串的內容是否相等。