首页 > 其他分享 >isEqual和==区别

isEqual和==区别

时间:2023-04-30 20:32:59浏览次数:36  
标签:返回 区别 NSLog isEqual UIImage YES img1


再看文档时留意到isEqual方法,但是我们比较的时候有时候就用==来比较,这2个有似乎没区别呢?网上有人说==来比较指针,isEqual是比较内容,其实这个话如果深究起来,并不是那么准确,我用代码测试了下:



1. str1=@"111";  
2. str2=@"111";  
3.  
4.  if([str1 isEqual:str2]){  
5.        NSLog(@"isEqual is YES");  
6.  
7.  
8.  if(str1==str2){  
9.        NSLog(@"== is YES");  
10.  
11. img1=[UIImage imageNamed:@"img1"];  
12. img2=[UIImage imageNamed:@"img1"];  
13.  if([img1 isEqual:img2]){  
14.        NSLog(@"isEqual is YES");  
15.  
16.  
17.  if(img1==img2){  
18.        NSLog(@"== is YES");  
19.  
20. imgv1=[[UIImageView alloc]initWithImage:img1];  
21. imgv2=[[UIImageView alloc]initWithImage:img1];  
22.  if([imgv1 isEqual:imgv2]){  
23.        NSLog(@"isEqual is YES");  
24.  
25.  if(imgv1==imgv2){  
26.        NSLog(@"== is YES");  
27.


前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方法。

标签:返回,区别,NSLog,isEqual,UIImage,YES,img1
From: https://blog.51cto.com/u_548275/6238195

相关文章

  • CloudKit 是什么,与 iCloud 云盘的区别是什么
    iCloudDrive和CloudKit的区别iCloudDrive其实就跟微软的OneDrive,百度网盘,天翼云盘一样,就是普通的云盘,你上传的文件,你登陆了云盘,这些存储的文件都是可见的。CloudKit就是苹果提供的在线数据库,开发者可以在线使用,有免费的存储,他的最明显特征就是,存在的数据支持历史版本......
  • odbc和jdbc的区别与联系
    一、定义 ODBC (OpeDatabaseConnectivity),开放数据库互联,是微软公司开发和定义的一套数据库访问标准,用户也可以直接将sql语句送给ODBC。通过使用ODBC,应用程序能够使用相同的源代码和各种各样的数据库进行交互。下面是ODBC应用系统的体系结构。一个基于ODBC的应用程序,对数据......
  • android有序广播和无序广播的区别
    BroadcastReceiver所对应的广播分两类:普通广播和有序广播。普通广播通过Context.sendBroadcast()方法来发送。它是完全异步的。所有的receivers接收器的执行顺序不确定。  因此,所有的receivers接收器接收broadcast的顺序不确定。这种方式效率更......
  • 08-react修改state数据驱动视图UI的更新【注意和vue的区别】
    //setState修改状态如果是直接修改页面不会改变使用setState修改数据才会驱动视图的改变//setState的原理:修改玩状态之后会调用render函数importReactDomfrom"react-dom"import{Component}from"react"//react状态不可变要重新创建状态,及覆盖原来的......
  • python-全双工,双工,单工的区别
    全双工(FullDuplex):通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工指可以同时进行信号的双向传输半双工(HalfDuplex):数据可以在一个信号载体的两个方向上传输,但是不能同时传输。像全双工传输一样,半双工包含一个双向线路,两线制。单工:只允许甲......
  • C++用new创建的对象和不用new创建的对象的区别
     在C++中,使用new关键字来创建对象时,与不使用new关键字来创建对象时,会产生以下几个区别:内存管理:使用new关键字来创建对象时,由编译器来决定分配内存的方式,这样可以更有效地利用内存资源。而不使用new关键字来创建对象时,则需要手动分配内存,可能会浪费一些内存资源。对象生命周期......
  • chatGTP对webpack4与webpack5的区别的分析
    chatGTP对webpack4与webpack5的区别的分析问1:webpack5与webpack4主要的区别是什么?chatGTP的回答Webpack5与Webpack4的主要区别如下:性能优化:Webpack5在构建速度和性能方面进行了大量的优化,从而可以更快地构建应用程序和库。TreeShaking:Webpack5对TreeShaking进行了改进......
  • vue2源码-十七、Vue组件间传值的方式及之间区别
    Vue组件间传值的方式及之间区别通过props传递:父组件传递数据给子组件使用//chilid,vueprops:{//字符串形式name:String//接收的类型参数//对象形式age:{type:Number,//接收的类型为数值defaule:18,//默认值为18r......
  • 虚拟文件系统和文件系统的区别和联系
    虚拟文件系统和文件系统是操作系统中的两个重要概念,它们有以下区别和联系:区别:文件系统是实际存储和管理文件的系统,而虚拟文件系统则是对文件系统的抽象和统一表示,使得应用程序可以不用考虑底层文件系统的细节。文件系统包含了文件的物理存储结构,而虚拟文件系统则是对文件的......
  • C++中函数重载和重写的区别是什么?
    函数重载:利用命名矫正(namemangling)技术,在编译时把函数名加上参数的首字母来区分同名函数。需要满足3个条件:1.同一个作用域下2.函数名相同3.函数参数类型不同,参数个数不同,参数顺序不同 示例:1......