java中的instanceof关键字详细解读

 更新时间:2024年01月19日 10:04:54   作者:CUIYD_1989  
这篇文章主要介绍了java中的instanceof关键字详细解读,instanceof 是 Java 的保留关键字,它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型,需要的朋友可以参考下

instanceof关键字

instanceof 是 Java 的保留关键字,它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。

代码中可能遇到的情况:

1、基本数据类型

在这里插入图片描述

如上图,这种情况会报错。将右边的类型改为引用类型:

在这里插入图片描述

依旧报错,改成特殊的null:

在这里插入图片描述

依旧报错,由此得出:基本类型不能用于 instanceof 判断。

为了验证这一点,换一个基本数据类型double进行测试:

在这里插入图片描述

依旧报错,可以验证结论正确。

2、引用类型

创建如下关系的类和接口:

在这里插入图片描述

在这里插入图片描述

测试一:

public static void main(String[] args) {
        Dog dog = new Dog();
        Animal animal = new Animal();
        Animal cat = new Cat();
        System.out.println("dog instanceof Dog的结果是:" + (dog instanceof Dog));     // true
        System.out.println("dog instanceof Big的结果是:" + (dog instanceof Big));    // true
        System.out.println("animal instanceof Big的结果是:" + (animal instanceof Big)); // true
        System.out.println("animal instanceof Dog的结果是:" + (animal instanceof Dog));  // false
        System.out.println("cat instanceof Animal的结果是:" + (cat instanceof Animal));  // true
        System.out.println("cat instanceof Cat的结果是:" + (cat instanceof Cat));     // true
    }

打印结果:

dog instanceof Dog的结果是:true
dog instanceof Big的结果是:true
animal instanceof Big的结果是:true
animal instanceof Dog的结果是:false
cat instanceof Animal的结果是:true
cat instanceof Cat的结果是:true

测试二:

在这里插入图片描述

  • 基本类型完全不能用于 instanceof 判断
  • null 只能放在 instanceof 关键字的左边

3、数组类型

延续引用类型示例,可以得到数组类型用来判断时的情况:

  Dog[] dog = new Dog[3];
Animal animal = new Animal();
System.out.println("dog instanceof Dog[]的打印结果是:"+(dog instanceof Dog[]));   
System.out.println("dog instanceof Big[]的打印结果是:"+(dog instanceof Big[])); 

打印结果:

dog instanceof Dog[]的打印结果是:true
dog instanceof Big[]的打印结果是:true

特别地,基本类型的数组也是可以用来判断的:

int[] arr = new int[3];
System.out.println("arr instanceof int[]的打印结果是:"+(arr instanceof int[]));

打印结果:

arr instanceof int[]的打印结果是:true

4、应用场景

instanceof 关键字一般用于强制转换,在强转之前用它来判断是否可以强制转换:

/**
 *========================================
 * @方法说明 : 空判断 空返回true
 * @param   obj
 * @return      boolean
 * @exception
 *========================================
 */
public static boolean isEmpty(Object obj) {
    if (obj == null || "null".equals(obj.toString()) || "".equals(obj.toString())) {
        return true;
    }
    if (obj instanceof String) {
        return ((String) obj).trim().length() == 0;
    }
    if (obj instanceof Collection) {
        return ((Collection) obj).isEmpty();
    }
    if (obj instanceof Map) {
        return ((Map) obj).isEmpty();
    }
    return false;
}

到此这篇关于java中的instanceof关键字详细解读的文章就介绍到这了,更多相关instanceof关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中的八种基本数据类型详解

    Java中的八种基本数据类型详解

    本文详细讲解了Java中的八种基本数据类型,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Java运算符与流程控制之全类型运算符用法及分支 / 循环语句实战指南

    Java运算符与流程控制之全类型运算符用法及分支 / 循环语句实战指南

    这篇文章主要介绍了Java运算符与流程控制之全类型运算符用法及分支/循环语句实战的相关资料,运算符包括算术、关系、逻辑、赋值和三元运算符,重点讲解了它们的用法、优先级和结合性,以及强制类型转换的注意事项,需要的朋友可以参考下
    2026-01-01
  • spring/springboot整合curator遇到的坑及解决

    spring/springboot整合curator遇到的坑及解决

    这篇文章主要介绍了spring/springboot整合curator遇到的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 关于java中多个JDK和切换版本介绍

    关于java中多个JDK和切换版本介绍

    大家好,本篇文章主要讲的是关于java中多个JDK和切换版本介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • JSP 开发之hibernate的hql查询多对多查询

    JSP 开发之hibernate的hql查询多对多查询

    这篇文章主要介绍了JSP 开发之hibernate的hql查询多对多查询的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • Maven排除依赖和可选依赖的使用方法

    Maven排除依赖和可选依赖的使用方法

    我们知道Maven依赖具有传递性,例如A依赖于B,B依赖于C,在不考虑依赖范围等因素的情况下,Maven会根据依赖传递机制,将间接依赖C 引入到A中,但如果A出于某种原因,希望将间接依赖C排除,那该怎么办呢,Maven为用户提供了两种解决方式排出和可选
    2023-06-06
  • java中MultipartFile类型转为File类型的4种方法

    java中MultipartFile类型转为File类型的4种方法

    Spring提供了一个MultipartFile接口来处理文件上传,但有时候我们需要将MultipartFile转换为File来进行一些特定的操作,比如保存文件到本地或者进行文件的处理等,这篇文章主要给大家介绍了关于java中MultipartFile类型转为File类型的4种方法,需要的朋友可以参考下
    2024-09-09
  • 在CentOS7(有图形化界面)上安装maven和idea的详细教程

    在CentOS7(有图形化界面)上安装maven和idea的详细教程

    这篇文章主要介绍了在CentOS7(有图形化界面)上安装maven和idea的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 深入理解Java之HashMap源码剖析

    深入理解Java之HashMap源码剖析

    这篇文章主要介绍了深入理解Java之HashMap源码剖析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 理解Java的序列化与反序列化

    理解Java的序列化与反序列化

    这篇文章主要为大家详细介绍了Java的序列化与反序列化,序列化是一种对象持久化的手段。普遍应用在网络传输、RMI等场景中。本文通过分析ArrayList的序列化来介绍Java序列化的相关内容,感兴趣的小伙伴们可以参考一下
    2016-02-02

最新评论