java学习3——instanceof和getClass()方法不能乱用,区别很大

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!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值