2010-09-18 46 views
4

我在這裏看到了一些關於SO的問題,其中包括功能isEqual:而不是標準==你應該使用'isEqual'還是'=='?

到目前爲止,我只學會了使用==,所以我想知道什麼更好用,每個的優缺點是什麼?你應該什麼時候使用它們?

謝謝。

回答

9

他們做不同的事情;所以你需要使用適當的一個:

考慮,如果你會:

NSString *a = @"Hello!"; 
NSString *b = a; 
NSString *c = [a mutableCopy]; 

if (a == b) NSLog(@"This prints"); 
if (b == c) NSLog(@"This doesn't"); 
if ([a isEqual:c]) NSLog(@"This does"); 

換句話說; ==只是檢查兩個指針​​是否指向同一個地方,因此是同一個對象; isEqual:檢查兩個對象是否相等;在這種情況下,ab是相同的字符串,而c是一個等於a的新字符串,因爲它具有相同順序的相同字符;但它有不同的課程和不同的地址。

對於對象,您幾乎總是希望使用isEqual:,如果它們具有相同的類,則會使用更具體的比較器(例如,isEqualToString:)。

==另一方面,你應該只能用於整型數據類型。 (他們爲對象沒有多大意義,而較少爲浮點數。)

+2

小心,'[副本]'可能會返回相同的對象,因爲它是不可變的字符串。 – dreamlax 2010-09-18 10:25:23

+0

dreamlax:對,爲了清晰起見,更新了答案;我相信複製一個NSConstStr會產生一個NSConcreteImmutableString;我可能錯了。 – 2010-09-18 11:10:35

+1

@ Williham Totland:將副本發送到一個常量字符串只是給你相同的指針。 – JeremyP 2010-09-18 12:36:46

1

將的isEqual根據用於接收器對象

==寫入的方法比較對象比較對象(或它們的值對C的地址鍵入像整數

這意味着,比方說NSString的變量==比較地址,但isEquals:會看字符串對象的值,因此有類似的功能到strcmp

注意,許多字符串實習,使他們地址是相同的,如果他們的數據是相同的,所以==可以出現在測試用例中工作。

相關問題