isEqual和==區別

來源:互聯網
上載者:User

再看文檔時留意到isEqual方法,但是我們比較的時候有時候就用==來比較,這2個有似乎沒區別呢?網上有人說==來比較指標,isEqual是比較內容,其實這個話如果深究起來,並不是那麼準確,我用代碼測試了下:

        NSString* str1=@"111";        NSString* str2=@"111";                if([str1 isEqual:str2]){                NSLog(@"isEqual is YES");        }                if(str1==str2){                NSLog(@"== is YES");        }        UIImage* img1=[UIImage imageNamed:@"img1"];        UIImage* img2=[UIImage imageNamed:@"img1"];        if([img1 isEqual:img2]){                NSLog(@"isEqual is YES");        }                if(img1==img2){                NSLog(@"== is YES");        }        UIImageView* imgv1=[[UIImageView alloc]initWithImage:img1];        UIImageView* imgv2=[[UIImageView alloc]initWithImage:img1];        if([imgv1 isEqual:imgv2]){                NSLog(@"isEqual is YES");        }        if(imgv1==imgv2){                NSLog(@"== is YES");        }

前2個比較NSString和UIImage,都返回YES,後面則沒有返回YES.

總結如下:

1.isEqual應該是比較內容的指標,反映在hashcode上,內容相同,並不代表isEqual返回true,比如說UIImageView的內容都是img1,但是isEqual返回NO,所以要謹慎使用isEqual而是要使用衍生方法,比如說isEqualToString

2.如果UIImage沒有建立成功,比如說圖片沒有,則返回nil,這個時候isEqual則返回NO,雖然hash值都是0

3.如果要改變預設,則實現isEqual:方法和hash方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.