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差不多的说。--------------------------------------------------------------累死了。。答个题容易么,你们不给赞还点反对合适么摔。另外,你们确定题主是要听补充的这些么摔!另外,要是觉得还有地方存在问题的欢迎交流哦思密达~
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差不多的说。--------------------------------------------------------------累死了。。答个题容易么,你们不给赞还点反对合适么摔。另外,你们确定题主是要听补充的这些么摔!另外,要是觉得还有地方存在问题的欢迎交流哦思密达~
相关文章推荐
- String有重写Object的hashcode和toString吗?重写equals不重写hashCode会有什么问题?
- 重写 toString()和Object.prototype.toString()的不同
- Object类之toString方法和equals方法
- 为什么SpringAOP使用JDK动态代理时好像没有代理Object.[equals()、hashCode()、toString()]这三个方法
- 面向对象第九课,面向对象三大基本特征,继承,Object用法,toString和equals方法
- String的equals方法改写
- JavaDay07--Notes(toString();equals(Object obj);+重写与重载)
- ArrayList的contains方法与Object的equals方法的关系
- 关于覆盖Object中的hashCode, equals和toString
- Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null objec
- Object.prototype.toString.call("abc")和"abc".toString()的值不一样
- toString()方法和Object.prototype.toString.call()方法对比
- 《Java核心技术》第10版读书笔记之Chap5(3)——Object类及其equals、hashCode与toString方法
- Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null objec
- Android异常:Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)'
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)
- java.lang.String中equals(Object anObject)与compareTo(String anotherString)的区别
- 黑马程序员_学习日记38_602基础加强(string、StringBuilder、Object.ReferenceEquals)
- Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)'