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)建字符串,如下:

原因:
在上圖中使用了兩種創(chuàng)建方式,第一個是字符串字面量創(chuàng)建方式,第二種是運行時創(chuàng)建方式*,這兩個字符串創(chuàng)建方式不同,地址不同,保存的區(qū)域也不同,第一種保存在常量區(qū),第二種保存在運行時內(nèi)存區(qū)【即堆內(nèi)存】
注:重寫“isEqual”方法就是提供自定義的相等標準,由此,我們可以使一個對象與任意對象比較時都返回真,如下重寫

