Objective-C中的字符串比較
作者:白云哥
還是對Objective-C欠熟悉,一個很簡單的字符串比較,想當然的按照C/C++的方式來處理,結果debug了好半天得不到正確的結果,Google之后才想起來原來是這么回事。
Objective-C中,NSString的==操作符比較的是字符串地址,不是字符串內容,如果需要比較內容則需要使用isEqualToString:方法。具體的介紹可以看這里. 但是Xcode會對部分字符串做優化,相同的字符串會使用同一份拷貝,所以有時候也會出現意想不到的“正確”結果,比如:
- NSString *str1 = @"Homebrew";
- NSString *str2 = @"Homebrew";
- // This compares the addresses of the string
- if (str1 == str2)
- NSLog (@"str1 equals str2");
- else
- NSLog (@"str1 does not equal str2");
這段代碼會打印出 str1 equals str2,但是這樣就不會:
- // Create a C string
- char *cStr = "Homebrew";
- NSString *str3 = [NSString stringWithUTF8String:cStr];
- NSString *str4 = @"Homebrew";
- // Wrong - this compares the address of the string
- if (str3 == str4)
- NSLog (@"str3 equals str4");
- else
- NSLog (@"str3 does not equal str4");
另外,正確的字符串內容比較方法為:
- char *cStr = "Homebrew"; NSString *str3 = [NSString stringWithUTF8String:cStr]; NSString *str4 = @"Homebrew"; if ([str3 isEqualToString:str4]) NSLog (@"str3 equals str4"); else NSLog (@"str3 does not equal str4");
原文地址:http://all-ipad.net/string-compare-in-objective-c/?utm_source=rss&utm_medium=rss&utm_campaign=string-compare-in-objective-c
責任編輯:佚名
來源:
白云哥博客