1:Object 中的equals()是比较的两个对象的句柄也就是指针的一种,也就是说它其实说的就是equals() 与 ==是同一回事!
JDK中的源码为证:
2:为什么会有: equals 比较的是对象,而== 比较的是引用的地址一说呢?
其实这个的说法是针对于那些继承至Object 的类然后又重写了equals()方法了类而言的。那么我们来看一下到底人家是怎么从写这个
equals()的呢? 下面一String 来说明一下啊
JDK中的源码为证:
从上面我们可以很明显的知道,那些重写了Object 的equals的一些类中已经把equals作为了比较对象来使用了!这里就有一个误区了:其实
并不是所有的对象的equals 方法都被从写了的。所以在那些没有被重写的类中equals方法其实是比较的句柄 。这里举个例子说明一下!
如果在自定义类中要进行重写equals()其实挺简单的,只需要在自定义类中加入
在自定义类中加入了equals后的
结果为:
true
false
true
总结: object 中的equals是比较的句柄 ,如果没有从写的话equals 比较句柄是无疑的! 如果重写了的话那么equals是比较的两个对象。
而== 对于主类型而言是比较的值,对于引用类型的话是比较的内存地址这个没有什么疑问的!