Java运算符篇之instanceof 运算符

举报
bug菌 发表于 2024/05/29 23:06:23 2024/05/29
【摘要】   咦咦咦,各位小可爱,我是你们的好伙伴 bug菌,今天又来给大家手把手教学Java SE系列知识点啦,赶紧出来哇,别躲起来啊,听我讲干货记得点点赞,赞多了我就更有动力讲得更欢哦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,u...

  咦咦咦,各位小可爱,我是你们的好伙伴 bug菌,今天又来给大家手把手教学Java SE系列知识点啦,赶紧出来哇,别躲起来啊,听我讲干货记得点点赞,赞多了我就更有动力讲得更欢哦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~


🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

  在Java编程中,instanceof 运算符用于检查对象是否是特定类的实例或特定类的子类的实例。它返回一个布尔值,指示对象是否是特定类或其子类的实例。本文将深入探讨 Java 中的 instanceof 运算符,包括其用法、源代码解析、应用场景案例、优缺点分析等内容,以帮助读者全面了解和掌握该运算符的使用。

摘要

  本文以 Java 编程语言为例,介绍了 instanceof 运算符的基本概念、用法、源代码解析、应用场景案例、优缺点分析等内容,旨在帮助读者更好地理解和运用 Java 中的 instanceof 运算符。

概述

  instanceof 运算符是用来检查对象是否是特定类或其子类的实例。它的基本语法如下:

object instanceof ClassName

  如果 object 是 ClassName 类的实例或其子类的实例,则返回 true;否则返回 false。instanceof 运算符常用于类型转换之前,以确保对象的类型符合要求,避免出现类型转换异常。

源代码解析

下面是一个简单的 Java 程序,演示了 instanceof 运算符的使用:

package com.example.javase.bugTest.operator.instanceOfOperator;

/**
 * @Author bug菌
 * @Source 公众号:猿圈奇妙屋
 * @Date 2024-05-26 23:50
 */
public class InstanceOfOperatorExample {
    public static void main(String[] args) {
        Animal animal = new Dog();

        if (animal instanceof Dog) {
            System.out.println("animal is an instance of Dog");
        } else {
            System.out.println("animal is not an instance of Dog");
        }
    }
}

运行上述代码,将输出以下结果:

animal is an instance of Dog

代码解读:

  根据如上代码作出如下解析,以便于同学们更好的理解与掌握它:

  代码的目的是使用 instanceof 运算符来检查一个对象是否是某个类的实例。在这个例子中,Animal 类是一个父类,而 Dog 类是 Animal 类的一个子类。首先,我们创建了一个 Animal 对象并用 Dog 类进行实例化:Animal animal = new Dog();
然后,我们使用 instanceof 运算符来判断 animal 对象是否是 Dog 类的实例。如果是,就打印 “animal is an instance of Dog”;否则,打印 “animal is not an instance of Dog”。

if (animal instanceof Dog) {
    System.out.println("animal is an instance of Dog");
} else {
    System.out.println("animal is not an instance of Dog");
}

  由于我们创建的对象是用 Dog 类进行实例化的,所以 animal 是 Dog 类的一个实例。因此,打印的结果将是 “animal is an instance of Dog”。

附上相关类代码。

package com.example.javase.bugTest.operator.instanceOfOperator;

/**
 * @Author bug菌
 * @Source 公众号:猿圈奇妙屋
 * @Date 2024-05-26 23:51
 */
public class Animal {
}
package com.example.javase.bugTest.operator.instanceOfOperator;

/**
 * @Author bug菌
 * @Source 公众号:猿圈奇妙屋
 * @Date 2024-05-26 23:51
 */
public class Dog extends Animal{
}

应用场景案例

场景一:类型转换前的检查

Object obj = someMethod();
if (obj instanceof String) {
    String str = (String) obj;
    // 执行字符串相关操作
}

代码解读:

  根据如上代码作出如下解析,以便于同学们更好的理解与掌握它:

  这段代码的作用是判断某个方法返回的对象是否为字符串类型,如果是则将其转换为字符串类型并进行相关操作。首先,代码中的someMethod()方法返回一个对象,该对象被赋值给变量obj。接下来,使用instanceof关键字判断obj是否为String类型。如果是,则进入if语句块内部。在if语句块中,将obj强制转换为String类型,并将其赋值给变量str。这样就可以在if语句块内部使用str变量执行字符串相关操作。注意,强制类型转换的操作需要保证实际类型与目标类型是兼容的,否则会抛出ClassCastException异常。在这段代码中,前面已经通过instanceof关键字判断了obj的类型为String,所以可以安全地将其转换为String类型。

场景二:遍历集合时的类型判断

List<Object> list = new ArrayList<>();
list.add("hello");
list.add(123);
for (Object obj : list) {
    if (obj instanceof String) {
        String str = (String) obj;
        // 执行字符串相关操作
    }
}

代码解读:

  根据如上代码作出如下解析,以便于同学们更好的理解与掌握它:

  这段代码创建了一个包含多个对象的列表。一开始,列表为空,接着用list.add()方法依次往列表中添加了一个字符串和一个整数。接下来,使用增强for循环(也称为for-each循环)遍历列表中的每个对象。在循环的每次迭代中,将列表中的当前对象赋值给变量obj。然后,使用instanceof运算符检查当前对象是否为字符串类型。如果是,将其强制转换为字符串类型,并将结果赋值给变量str。此后,可以对str进行与字符串相关的操作。注意:在进行强制类型转换时,需要确保当前对象的实际类型与转换的目标类型相符。否则,可能会出现ClassCastException异常。

优缺点分析

优点:

  • 可以在类型转换之前进行对象类型的检查,避免类型转换异常。
  • 提供了一种简单而有效的方式来处理对象类型的判断和转换。

缺点:

  • instanceof 运算符在某些情况下可能会导致代码不够灵活,过度使用可能会导致代码可读性降低。
  • 不适用于泛型的类型判断,无法直接判断泛型的实际类型。

测试用例

测试代码

package com.example.javase.bugTest.operator.instanceOfOperator;

/**
 * @Author bug菌
 * @Source 公众号:猿圈奇妙屋
 * @Date 2024-05-26 23:50
 */

public class InstanceOfOperatorExample {
    public static void main(String[] args) {
        Animal animal = new Dog();

        if (animal instanceof Dog) {
            System.out.println("animal is an instance of Dog");
        } else {
            System.out.println("animal is not an instance of Dog");
        }
    }
}

测试结果

  针对如上测试代码,这里我本地进行实际测试一波,结果仅供参考,有条件的同学们也可以自己本地实践一下。

在这里插入图片描述

测试代码解析

  针对如上测试代码,这里我再具体给大家讲解下,希望能够更透彻的帮助大家理解。

  该代码主要是测试Java中的instanceof运算符的使用。具体分析如下:

  1. 首先定义了一个Animal类和一个Dog类(Dog是Animal的子类),animal变量是Animal类型的,但实际上指向了一个Dog对象。

  2. 在main方法中,使用instanceof 运算符判断animal是否是Dog类型的实例。

  3. 如果animal是Dog类型的实例,则输出"animal is an instance of Dog";否则输出"animal is not an instance of Dog"。

  总结:instanceof运算符用于判断一个对象是否是某个类或其子类的实例。在该代码中,animal是Dog类的实例,因此输出"animal is an instance of Dog"。

全文小结

  本文详细介绍了 Java 中 instanceof 运算符的基本概念、用法、源代码解析、应用场景案例、优缺点分析等内容。通过学习本文,读者可以更全面地了解和掌握 Java 编程中 instanceof 运算符的使用方法。

总结

  instanceof 运算符是 Java 编程中用于检查对象类型的重要工具,可以帮助开发者避免类型转换异常,确保代码的稳健性和可靠性。希望本文的介绍能够帮助读者更好地理解和应用 instanceof 运算符。

结尾

  通过本文的学习,希望读者能够熟练掌握 instanceof 运算符的使用,合理运用于实际的 Java 编程项目中,从而提高代码的质量和效率。祝愿读者在 Java 编程的路上越走越远!

  … …

  好啦,这期的内容就基本接近尾声啦,若你想学习更多,你可以看看专栏的导读篇《「滚雪球学Java」教程导航帖》,本专栏致力打造最硬核 Java 零基础系列学习内容,🚀打造全网精品硬核专栏,带你直线超车;欢迎大家订阅持续学习。功不唐捐,久久为功!

「赠人玫瑰,手留余香」,咱们下期拜拜~~

附录源码

  如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

☀️建议/推荐你

  无论你是计算机专业的学生,还是对编程感兴趣的跨专业小白,都建议直接入手「滚雪球学Java」专栏;该专栏不仅免费,bug菌还郑重承诺,只要你学习此专栏,均能入门并理解Java SE,以全网最快速掌握Java语言,每章节源码均同步「Gitee」,你真值得拥有;学习就像滚雪球一样,越滚越大,带你指数级提升。

  码字不易,如果这篇文章对你有所帮助,帮忙给bug菌来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

  同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 20w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。