1. 前言

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

2. instanceof

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

boolean isInstance = obj instanceof Class

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

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

int integer = 0;
// 编译时会报错
boolean isInstance = integer instanceof Number

此外编译器会检查instanceof表达式中的 obj 能否能转换成右边的Class类型,如果无法转换则会直接报错,如果不能确定类型,也会通过编译。

3. 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是否为原始类型(booleancharbyteshortintlongfloatdouble)。

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

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

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

6. 总结

这些类型判断除了前两种比较常见,后面的两种用到的机会还是有限的。不知道你用过这里面的哪几种?欢迎留言讨论。我是:码农小胖哥,多多关注,更多知识分享。

关注公众号:Felordcn 获取更多资讯

个人博客:https://felord.cn

Java中类型判断的几种方式的更多相关文章

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

    Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...

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

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

  3. java中数组复制的两种方式

    在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...

  4. JS 中对变量类型判断的几种方式

    文章整理搬运,出处不详,如有侵犯,请联系~   数据类型判断和数据类型转换代码工具 在 JS 中,有 5 种基本数据类型和 1 种复杂数据类型,基本数据类型有:Undefined, Null, Boo ...

  5. java中终止线程的三种方式

    在java中有三种方式可以终止线程.分别为: 1.  使用退出标志,使线程正常退出,也就是当run方法完成后线程终止.  2.  使用stop方法强行终止线程(这个方法不推荐使用,因为stop和sus ...

  6. Java中对象拷贝的两种方式

    引用的拷贝 //引用拷贝 private static void copyReferenceObject(){ Person p = new Person(23, "zhang") ...

  7. Java中创建String的两种方式

    1.在Java中,创建一个字符串有两种方式 String x = "abc";String y = new String("abc"); 这两种方式有什么区别呢 ...

  8. java中使用mongodb的几种方式

    最近有时间看了一下mongodb,因为mongodb更容易扩展所以考虑使用mongodb来保存数据. 首先下载安装mongodb,这是很简单的,装好后使用mongod命令就可以启动数据库.正式部署的话 ...

  9. java中设置代理的两种方式

    1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式. ...

随机推荐

  1. css动画是否会被js阻塞

    css动画是否会被js阻塞 css的动画部分是会被js阻塞的,不过transform的动画则不会受影响. 下面举一个margin-left移动的动画下,启动js阻塞动画的性能图表 <style& ...

  2. JVM学习第三天(JVM的执行子系统)之字节码指令

    早上看了Class类文件结构,晚上继续来看字节码指令,毕竟谁也不是一步登天的(说白了还是穷); 字节码指令 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码,Opcode ...

  3. 安装与激活PhpStrom

    1.下载安装PHPstorm(https://pan.baidu.com/s/1nwK3ew5 密码dhtr) 2.运行 3.下一步选择中间,在http://idea.lanyus.com/ 上获取激 ...

  4. 20190925-04Redis五大数据类型之Key 000 025

  5. Python日志功能与处理逻辑

    前言 在应用程序执行过程中,我们希望通过规范格式输出程序执行的详细信息,这时我们需要用到日志功能.在Python语言中,有个內建模块logging能够很好的实现日志功能.整体来说,logging配置可 ...

  6. Java类加载机制()

    Java类加载机制(转载) 概述 在开始正文之前,我们先看两张图 .Java平台的理解?Java最显著的特性?Java是解释执行? 先看一下java程序的执行流程图 再看一下jvm的大致物理结构图 本 ...

  7. python 入门,最基础语法集合100行!!

    月开始一直咸到现在,博客难产 心里特别特别愧疚,如此懈怠,怎么对的起我那六个粉丝呢!!!他们一定正日夜翘首以盼,等着我更新博客呢.于是我赶紧到盘里找找看以前的存货 不好意思,拿错了,是这个 我pyth ...

  8. oracle之分层查询

    ORACLE分层查询start with&connect by 分层查询是select 语句的扩展,目的是迅速找出表中列-列的隶属关系. 19.1 树的遍历 ORACLE是一个关系数据库管理系 ...

  9. Hadoop入门学习整理(三)

    1.Hive 的安装 下载tar包,并且要注意和Hadoop版本兼容. 下载  ----->  传输 -------> 解压     即可. 然后配置环境变量和相关配置信息.   参考: ...

  10. JavaScript中常用的数据输出方式解析

    在js中,一般使用如下几种方式进行数据的输出: 1. 在浏览器的控制台输出 浏览器F12打开浏览器控制台(一般前端开发人员必备浏览器为谷歌浏览器,下面就以谷歌浏览器为例对控制台尽心解析): 1.1 E ...