您的位置:首页 > 移动开发 > Objective-C

Object改写之前和改写之后(如String和tostring)的==和equals的关系

2017-07-18 22:49 351 查看
通俗点讲,==是看看左右是不是一个东西。equals是看看左右是不是长得一样。如何记住嘛。如果单纯是想记住,==:等于。equals:相同。两个长得一样的人,只能说长的相同(equals),但是不等于他们俩是一个人。你只要记住equals,==就不用记了。---------------------------------------------------------------------------------术语来讲的区别:1.==是判断两个变量或实例是不是指向同一个内存空间    equals是判断两个变量或实例所指向的内存空间的值是不是相同
2.==是指对内存地址进行比较    equals()是对字符串的内容进行比较3.==指引用是否相同    equals()指的是值是否相同---------------------------------------------------------------------------------不过,再仔细点吧。比较对象不同,也是不一样的。1.如果比较对象是值变量:只用==,equals()是不存在的。为毛?通俗点讲呢,equals()是个函数啊亲,因为基本类型int float不是对象,根本就没有函数啊摔。再通俗点,int.
equals(),这个写法你感受一下。。2.如果比较对象是引用型变量:就是我上面说的那个情况了。我觉得题主就是问这个的。     ==:比较两个引用是不是指向同一个对象实例。啥,你问我上面那句话啥意思,这说来话长了诶,来坐坐坐,咱从堆栈开始讲起~(自行百度吧亲,实在写不动了,改天补充吧。)     equals:             那啥,所有的对象都是继承自Object这个大家都知道吧。然后equals()就是这里面的一个函数,然后那啥,Object里的equals的实现就是直接调用了==操作。  
          所以如果这个时候你自定义了一个类,仅仅继承自Object且没有重写equals方法,那么其equals操作也是与Object类一样,仅仅是直接调用==操作。             这个时候他俩没啥区别。当然这是废话,尼玛equals里面这时候本来就用的==,能不一样么摔。这么说吧,这时候比较自定义类用equals和==是一样一样的,因为这个时候尼玛都是比较句柄地址, 自定义的类是继承于object,而object中的equals就是用==来实现的。参见上面那条。如果一个类重写过equals方法(或者继承自一个重写过equals方法的类,那么效果与==操作就不一样了。其实我觉得这才是楼主真正要问的地方。这里参见最开始的回答。另外,那啥,再加一句,instanceof
也是个好东西哇。你可以用他检查引用型变量是否属于某一个Class:那啥,返回的也是true 或者false,跟c#里的is差不多的说。--------------------------------------------------------------累死了。。答个题容易么,你们不给赞还点反对合适么摔。另外,你们确定题主是要听补充的这些么摔!另外,要是觉得还有地方存在问题的欢迎交流哦思密达~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  equals 对象
相关文章推荐