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

原因:
在上圖中使用了兩種創(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í)都返回真,如下重寫

