Objective-C中判斷兩個(gè)變量是否相等有兩種方式电谣,一種是利用“==”直接比較秽梅,另一種就是“isEqual”方法抹蚀,下面是它們的介紹:
"=="方法:
當(dāng)使用==來(lái)判斷兩個(gè)變量是否相等的時(shí)候,如果是基本類型變量企垦,且都是數(shù)值型(類型可以不同),則只要值相等环壤,就會(huì)返回真;
如果是兩個(gè)指針類型變量【例如OC對(duì)象】钞诡,則必須是兩個(gè)指針變量保存的內(nèi)存地址相同才會(huì)返回真郑现,且如果使用這種方法判斷兩個(gè)沒(méi)有繼承關(guān)系的指針變量就會(huì)提示警告:Comparison of distinct pointer types ('XXXX' and 'YYYY')
“isEqual”方法:
這個(gè)方法是NSObject類提供的一個(gè)實(shí)例方法,因此荧降,所有指針變量都可以調(diào)用該方法來(lái)判斷是否與其他指針變量相等接箫。但這個(gè)方法判斷兩個(gè)對(duì)象相等的標(biāo)準(zhǔn)與“==”符號(hào)沒(méi)有區(qū)別,同樣要求兩個(gè)指針變量指向同一個(gè)對(duì)象才會(huì)返回真朵诫。因此废累,這個(gè)NSObject類提供“isEqual”實(shí)例方法實(shí)際上沒(méi)有太大意義九默。
不過(guò)需要特別提到的是NSString已經(jīng)重寫了NSObject的“isEqual”方法,判斷標(biāo)準(zhǔn)不再是兩個(gè)指針變量保存的內(nèi)存地址相同返回真乙各,而是只要兩個(gè)字符串包含的字符序列相同就會(huì)返回真,否則假
驗(yàn)證:
我們通過(guò)兩種方法來(lái)創(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í)都返回真烤黍,如下重寫