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

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

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

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

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

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


字符串比較.png

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

注:重寫“isEqual”方法就是提供自定義的相等標準,由此,我們可以使一個對象與任意對象比較時都返回真,如下重寫

isEqual.png

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

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

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

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