iOS 中的“==”與“isEqual:”

Objective-C中判斷兩個(gè)變量是否相等有兩種方式,一種是利用“==”直接比較,另一種就是“isEqual”方法,下面是它們的介紹:

"=="方法:
當(dāng)使用==來判斷兩個(gè)變量是否相等的時(shí)候,如果是基本類型變量,且都是數(shù)值型(類型可以不同),則只要值相等,就會(huì)返回真;
如果是兩個(gè)指針類型變量【例如OC對(duì)象】,則必須是兩個(gè)指針變量保存的內(nèi)存地址相同才會(huì)返回真,且如果使用這種方法判斷兩個(gè)沒有繼承關(guān)系的指針變量就會(huì)提示警告:Comparison of distinct pointer types ('XXXX' and 'YYYY')

“isEqual”方法:
這個(gè)方法是NSObject類提供的一個(gè)實(shí)例方法,因此,所有指針變量都可以調(diào)用該方法來判斷是否與其他指針變量相等。但這個(gè)方法判斷兩個(gè)對(duì)象相等的標(biāo)準(zhǔn)與“==”符號(hào)沒有區(qū)別,同樣要求兩個(gè)指針變量指向同一個(gè)對(duì)象才會(huì)返回真。因此,這個(gè)NSObject類提供“isEqual”實(shí)例方法實(shí)際上沒有太大意義。

不過需要特別提到的是NSString已經(jīng)重寫了NSObject的“isEqual”方法,判斷標(biāo)準(zhǔn)不再是兩個(gè)指針變量保存的內(nèi)存地址相同返回真,而是只要兩個(gè)字符串包含的字符序列相同就會(huì)返回真,否則假

驗(yàn)證:
我們通過兩種方法來創(chuàng)建字符串,如下:


字符串比較.png

原因:
在上圖中使用了兩種創(chuàng)建方式,第一個(gè)是字符串字面量創(chuàng)建方式,第二種是運(yùn)行時(shí)創(chuàng)建方式*,這兩個(gè)字符串創(chuàng)建方式不同,地址不同,保存的區(qū)域也不同,第一種保存在常量區(qū),第二種保存在運(yùn)行時(shí)內(nèi)存區(qū)【即堆內(nèi)存】

注:重寫“isEqual”方法就是提供自定義的相等標(biāo)準(zhǔn),由此,我們可以使一個(gè)對(duì)象與任意對(duì)象比較時(shí)都返回真,如下重寫

isEqual.png

Test.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 蘋果官方文檔翻譯 《Objective-C語言編程》(Programming with Objective-C) ...
    fever105閱讀 26,352評(píng)論 19 129
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,666評(píng)論 30 472
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,609評(píng)論 0 6
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,106評(píng)論 0 9
  • 請(qǐng)大家見諒,我也想用一個(gè)文藝點(diǎn)的標(biāo)題,但是無奈肚子里墨水太少了,所以只能用一個(gè)小學(xué)生一樣的標(biāo)題。我...
    待時(shí)飛閱讀 220評(píng)論 14 1

友情鏈接更多精彩內(nèi)容