instanceof
只能用于子类和超类比较,也就是继承层次上的比较
getClass()就无所谓了,各种类型比较
先科普一下java语言要求规范中要求equals方法得有5点特性:
1.自反性
2.对称性
3.传递性
4.一致性
5.对任意非空引用x,x.equals(null)返回值都得是false
很简单,我就举个具体的例子来说明
class E
{...}
class M extends E
{...}
可以看出M是E的子类,现在假设e是E的对象,m是M的对象,同时两个对象拥有相同的名字之类
那么在e.equals(m)方法中调用instanceof,那么返回的值就是true,毕竟M是E的子类,但是反过来呢?m.equals(e)结果根据 2.对称性来说也必须得返回true
但是啊,但是啊,注意啦
可是这样就让M类受到了不公平的待遇啊,毕竟M类是可以有自己的东西的,他可是有自己独特的东西的啊,这就导致在M中equals是比较这些独有的东西,那就说明什么呢?得返回false啊,可是已经说明了,由于对称性不允许返回false和抛出异常啦,哼哼,真相只有一个:那就是instanceof并不是完美的!
当然啦,对于静态嘛,比较绝对可以用Allays.equals(a,b)
当然啦Obiect类里面也有比较就是equals,里面呢,两个null比较结果返回true!