1. 前言

在Java这种强类型语言中类型转换、类型判断是经常遇到的。今天就细数一下Java中类型判断的方法方式。
2. instanceof

instanceof是Java的一个运算符,用来判断一个对象是否为一个类的实例 。用法:

boolean isInstance = obj instanceof Class

其中 obj 为一个对象实例,Class 为类名或者一个接口名,当 obj 为 Class 的实例,或是其子类实例,或是其接口的实现类实例,都返回 true,否则返回false。

需要注意的是obj 必须为引用类型,不能是基本类型,下面的式子是无法编译的:

int integer = 0;
// 编译时会报错
boolean isInstance = integer instanceof Number
此外编译器会检查instanceof表达式中的 obj 能否能转换成右边的Class类型,如果无法转换则会直接报错,如果不能确定类型,也会通过编译。
  1. Class.isInstance
   // Class.isInstance 等效于instanceof 操作符boolean ret = entity instanceof UserInfo;boolean isInstance = UserInfo.class.isInstance(entity);

如上所示Class.isInstance 等效于instanceof 操作符。该方法是在Java 1.1中引入的,因为它可以动态地使用。如果参数不为null,并且可以在不引发ClassCastException的情况下成功将其强制转换为左边的引用类型时将返回true。
4. Class.isAssignableFrom

该方法的调用者和参数都是Class对象,调用者为父类,参数为本身或者其子类。

boolean assignableFrom = List.class.isAssignableFrom(ArrayList.class);

经常用来判断父子继承关系,我在Mybatis插件教程一文中就用到了该方法来判断某个类是不是某个接口的实现类。
5. Class.isPrimitive

此方法主要用来判断Class是否为原始类型(boolean、char、byte、short、int、long、float、double)。

//true
boolean primitive = int.class.isPrimitive();

它是来解决我们在本文章节2中提到的基础类型判断的问题。但是它只能判断某类型是不是基础类型,并不是具体到某个类型的。

但是请注意,基础类型的包装类型用此方法判断结果会返回false。
  1. 总结

这些类型判断除了前两种比较常见,后面的两种用到的机会还是有限的。不知道你用过这里面的哪几种?

在此我向大家推荐一个架构学习交流圈。交流学习微信:539413949(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

Java中类型判断的几种方式相关推荐

  1. java判断类型_Java中类型判断的几种方式 - 码农小胖哥 - 博客园

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

  2. java 判断类型_Java中类型判断的几种方式

    在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式.拉勾IT课小编为大家提供java种类型判断方式. instanceof instanceof是Ja ...

  3. java判断类型_Java中类型判断的几种方式

    1. 前言 在Java这种强类型语言中类型转换.类型判断是经常遇到的.今天就细数一下Java中类型判断的方法方式. 2. instanceof instanceof是Java的一个运算符,用来判断一个 ...

  4. java直接调用复制文件,java中文件复制的4种方式,java文件的复制

    java中文件复制的4种方式,java文件的复制 今天一个同事问我文件复制的问题,他一个100M的文件复制的指定目录下竟然成了1G多,吓我一跳,后来看了他的代码发现是自己通过字节流复制的,定义的字节数 ...

  5. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  6. JAVA中集合输出的四种方式

    在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello {public stati ...

  7. java中Map遍历的四种方式

    java中Map遍历的四种方式 在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方 ...

  8. Java中实现接口的三种方式您造吗?

    本文介绍了Java中实现接口的三种方式:常规实现方式.匿名内部类和 Lambda表达式实现方式.希望已经了解的同学可以重新温习一下,不了解的同学则从中受益! Java中接口最常规的实现方式 同学们都会 ...

  9. java中实现多线程的三种方式

    java中实现多线程的三种方式 1.实现多线程的方法: 在java中实现多线程的两途径:继承Thread类,实现Runable接口(Callable) 2.继承Thread类实现多线程: ​ 继承类T ...

最新文章

  1. Windows7 IIS 500-内部服务器错误的解决方法
  2. Spring之泛型依赖注入
  3. 梅州有学java的地方吗,梅州java工资水平,梅州java工资很高吗,梅州java工资底薪能到多少...
  4. 负载均衡和CDN技术
  5. 【Xamarin挖墙脚系列:IOS-关于手机支持的屏幕方向】
  6. http抓包实战 pdf_抓包实战 | 浏览器里的HTTP请求到底是如何完成的?
  7. Transformer、BERT细节基础知识点
  8. Cornerstone详细操作
  9. 21幅非常有创意的倒影摄影作品欣赏
  10. activity和service之间的相互通信方法
  11. 技术分享——SSM图书馆预约占座系统
  12. 解决java中html转word文档,转成功后的word文档在断网情况下无法显示图片问题
  13. linux游戏盒子恢复默认,dnf多玩补丁_多玩dnf盒子我用了补丁,怎么还原成默认?具体点,......
  14. python下opencv安装
  15. 关于黑莓手机 三键重启的操作方法
  16. 2022-2027年中国射频电缆市场竞争态势及行业投资前景预测报告
  17. 网站备案后一定要做的一件事【否则罚款5千元~1万元】
  18. 2020年GitHub 上那些优秀Android开源库,这里是Top10!
  19. 制作Linux登录欢迎界面
  20. java核心技术卷I-映射

热门文章

  1. Oracle递归查询上下级数据
  2. 优动漫PAINT-紫藤花画法
  3. 关于在Linux系统下静默安装oracle11G(供参考)
  4. “腾讯网迷你版”如何关闭?
  5. 腾讯2014软件开发笔试题目
  6. Java中Stream流的中间操作步骤
  7. 如何用JS实现各种数组排序?
  8. 前端实现tts(文字转语音)
  9. mysql 索引,以及sql优化总结
  10. Oracle删除profil,紧急求助:误删除一个重要的profile