Java instanceof和getClass()区别实例解析

 更新时间:2020年07月29日 09:18:36   作者:htj10  
这篇文章主要介绍了Java instanceof和getClass()区别实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

对象 instanceof 类名,表示 对象是类名的实例,或者是其子类的实例,返回 true,否则返回 false。

对象.getClass() == 类名.class ,表示 只有对象是该类的实例,才返回 true

class A { }

class B extends A { }

Object o1 = new A();
Object o2 = new B();

o1 instanceof A => true
o1 instanceof B => false
o2 instanceof A => true // <================ HERE
o2 instanceof B => true

o1.getClass().equals(A.class) => true
o1.getClass().equals(B.class) => false
o2.getClass().equals(A.class) => false // <===============HERE
o2.getClass().equals(B.class) => true 


getClass() will be useful when you want to make sure your instance is NOT a subclass of the class you are comparing with.

例子:

class Base{
  
}
class Derived extends Base{
  
}

public class Hello {
  public static void main(String[] args) throws ParseException {
    Derived d = new Derived();
    boolean bRet;
    bRet = d instanceof Derived;//true
    bRet = d instanceof Base;//true
    bRet = d.getClass() == Derived.class;//true
//   bRet = d.getClass() == Base.class;// 出错
    bRet = d.getClass().equals(Base.class);//false
  }
}

使用,重写equals

class Person{
  private String id;
  private String name;
  //重写equals()方法,提供自定义的相等标准
  public boolean equals(Object obj){
    if(this == obj)//若为同一个对象
      return true;
    //只有当obj是Person对象
    if(null != obj && obj.getClass() == Person.class){
      Person p = (Person)obj;
      if(id.equals(obj).getId() && ...){
        return true;
      }
    }
    return false;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java后台线程操作示例【守护线程】

    Java后台线程操作示例【守护线程】

    这篇文章主要介绍了Java后台线程操作,结合实例形式分析了java守护线程相关原理、操作技巧与使用注意事项,需要的朋友可以参考下
    2019-09-09
  • Java中synchronized锁的深入理解

    Java中synchronized锁的深入理解

    这篇本文主要对Java中synchronized锁进行深入理解,文中通过synchronized的优化,synchronized的实现原理及synchronized的升级过程来介绍Java中synchronized锁,感兴趣的同学可以跟着小编一起来学习
    2023-05-05
  • SpringBoot spring.factories加载时机分析

    SpringBoot spring.factories加载时机分析

    这篇文章主要为大家介绍了SpringBoot spring.factories加载时机分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • jvm调优的几种场景(小结)

    jvm调优的几种场景(小结)

    本文主要介绍了jvm调优的几种场景,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • JAVA实现扫描线算法(超详细)

    JAVA实现扫描线算法(超详细)

    扫描线算法就是从Ymin开始扫描,然后构建出NET,之后根据NET建立AET。接下来本文通过代码给大家介绍JAVA实现扫描线算法,感兴趣的朋友一起看看吧
    2019-10-10
  • selenium高效应对Web页面元素刷新的实例讲解

    selenium高效应对Web页面元素刷新的实例讲解

    今天小编就为大家分享一篇selenium高效应对Web页面元素刷新的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • JAVA中的Launcher类解析

    JAVA中的Launcher类解析

    这篇文章主要介绍了JAVA中的Launcher类解析,Launcher作为JAVA应用的入口,根据双亲委派模型,Laucher是由JVM创建的,它类加载器应该是BootStrapClassLoader, 这是一个C++编写的类加载器,是java应用体系中最顶层的类加载器,需要的朋友可以参考下
    2023-09-09
  • SpringBoot整合flyway实现自动创建表的方法

    SpringBoot整合flyway实现自动创建表的方法

    这篇文章主要介绍了SpringBoot整合flyway实现自动创建表的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 关于mybatis遇到Integer类型的参数时动态sql需要注意条件

    关于mybatis遇到Integer类型的参数时动态sql需要注意条件

    这篇文章主要介绍了关于mybatis遇到Integer类型的参数时动态sql需要注意条件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 解决dubbo错误ip及ip乱入问题的方法

    解决dubbo错误ip及ip乱入问题的方法

    今天小编就为大家分享一篇关于解决dubbo错误ip及ip乱入问题的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03

最新评论