Java之instanceof 运算符:掌握它的使用方法

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  在Java开发中,我们经常要判断一个对象是否是某个类的实例,这时候就需要用到Java中的instanceof运算符。本文将详细介绍该运算符的用法、源代码解析、应用场景案例、优缺点分析、类代码方法介绍以及测试用例等相关内容,帮助大家更加深入地了解instanceof运算符。

摘要

  本文主要介绍了Java开发中的instanceof运算符,包括该运算符的用法、源代码解析、应用场景案例、优缺点分析、类代码方法介绍以及测试用例等相关内容。在学习完本文之后,读者应该对该运算符的使用和作用具有清晰的认识,可以更加熟练地运用该运算符完成实际开发工作。

Java之instanceof 运算符

简介

  instanceof运算符是Java中的一种二元运算符,用来判断某个对象是否是指定类或其子类的实例。该运算符的使用场景非常广泛,比如在Java中进行类型转换时,就可以通过instanceof运算符判断目标类型是否合法,从而避免类型转换异常的发生。

  instanceof 运算符的语法格式如下:

object instanceof className

  其中,object是要判断的对象,className是指定的类的名称。如果该对象是指定类或其子类的实例,则返回true;否则返回false。

源代码解析

  instanceof运算符在Java中的实现方式,其实就是通过判断对象的类是否和指定的类(或其子类)一致,来决定返回true还是false。具体来说,Java中的instanceof运算符是通过以下方式实现的:

1.首先获取要判断的对象的实际类型;
2.然后获取指定类(或其子类)的Class对象;
3.最后比较这两个Class对象是否一致,如果一致则返回true;否则返回false。

如下示例代码:

Object obj = new String("Hello World");
if(obj instanceof String) {
    System.out.println("obj is an instance of String");
}

  上述代码中,obj是一个Object类型的对象,但实际上它所封装的是一个String类型的对象。我们通过instanceof运算符判断obj是否是String类型的实例,如果是,则输出"obj is an instance of String"。

代码解析:

  这段代码创建了一个名为obj的对象,并将其赋值为一个新的字符串对象"Hello World"。然后,它使用instanceof运算符检查obj是否是String类的一个实例。由于obj确实是一个String对象,因此会输出"obj is an instance of String"。

应用场景案例

  instanceof运算符的应用场景非常广泛,下面就举几个例子说明:

1.类型转换:在Java中进行类型转换时,可以使用instanceof运算符判断目标类型是否合法,从而避免类型转换异常的发生。例如:

Object obj = "Hello World";
if(obj instanceof String) {
    String str = (String) obj;
    System.out.println("Length of str: " + str.length());
}

  上述代码中,obj是一个Object类型的对象,实际上是一个String类型的对象。我们通过instanceof运算符判断obj是否是String类型的实例,如果是,则将obj转换为String类型的对象,并输出字符串的长度。

代码解析:

  这段代码首先创建了一个 Object 类型的变量 obj,然后将其赋值为一个字符串 “Hello World”。接下来使用 instanceof 运算符判断 obj 是否属于 String 类型,如果是,就将其强制转换为 String 类型并赋值给 str 变量。最后打印出 str 变量的长度。由于 “Hello World” 字符串长度为 11,所以最终输出结果应该是:Length of str: 11

2.多态性:在Java中,可以通过多态性实现对不同类型对象的统一处理。此时,可以使用instanceof运算符判断实际类型是否符合要求,从而进行相应的处理。例如:

public void handleType(Object obj) {
    if(obj instanceof String) {
        String str = (String) obj;
        System.out.println("Length of str: " + str.length());
    } else if(obj instanceof Integer) {
        int num = (Integer) obj;
        System.out.println("Square of num: " + num * num);
    } else {
        System.out.println("Unsupported type: " + obj.getClass().getName());
    }
}

  上述代码中,handleType方法接受一个Object类型的参数obj,通过instanceof运算符判断obj的实际类型,并进行相应的处理。如果obj是String类型的实例,则输出字符串的长度;如果obj是Integer类型的实例,则输出数字的平方;如果obj不是String或Integer类型,则输出不支持的类型。

代码解析:

  该方法接受一个Object类型的参数,然后通过对参数类型的判断进行不同的处理。如果参数是一个String类型的对象,则将其转换为String类型,并输出其长度。如果参数是一个Integer类型的对象,则将其转换为int类型,并输出其平方值。如果参数类型不是String或Integer,则输出其类型信息。

优缺点分析

  instanceof运算符的优点在于,它可以判断一个对象是否是指定类(或其子类)的实例,并在相应的场景中进行相应的处理,从而提高代码的健壮性和可维护性。

  instanceof运算符的缺点在于,它的使用可能会导致代码的性能下降。因为在使用instanceof运算符时,需要获取对象的实际类型,并且需要获取指定类(或其子类)的Class对象,这些操作都需要消耗一定的时间和资源。

类代码方法介绍

  Java中的instanceof运算符是一个二元运算符,可以使用在对象和类之间进行判断。以下是instanceof运算符的语法格式:

object instanceof className

  其中,object是要判断的对象,className是指定的类的名称。如果该对象是指定类或其子类的实例,则返回true;否则返回false。

测试用例

  我们可以使用以下测试用例来验证instanceof运算符的正确性:

测试代码演示

package com.example.javase.se.operators;

/**
 * @Author ms
 * @Date 2023-11-07 22:57
 */
public class InstanceofDemo {
    public static void main(String[] args) {
        Object obj = "Hello World";
        if (obj instanceof String) {
            String str = (String) obj;
            System.out.println("Length of str: " + str.length());
        }
    }
}

  上述代码中,我们定义了一个Object类型的变量obj,并将其初始化为一个String类型的对象。然后通过instanceof运算符判断obj是否是String类型的实例,如果是,则将obj转换为String类型的对象,并输出字符串的长度。

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。

  如上测试用例是一个InstanceofDemo类,在主函数中定义了一个Object类型的obj变量,赋值为"Hello World"字符串。然后使用instanceof运算符检查obj是否属于String类型。由于obj确实是String类型,所以会执行if语句内的代码。在if语句内,将obj强制转换为String类型,然后输出字符串长度。最后输出结果为:Length of str: 11。

全文小结

  Java中的instanceof运算符是一种二元运算符,用于判断一个对象是否是指定类(或其子类)的实例。该运算符的应用场景非常广泛,可以用于类型转换、多态性等方面,提高代码的健壮性和可维护性。但同时,由于该运算符的使用可能会导致代码的性能下降,因此在实际开发中需要根据具体情况进行权衡。

总结

  本文详细介绍了Java开发中的instanceof运算符,包括该运算符的用法、源代码解析、应用场景案例、优缺点分析、类代码方法介绍以及测试用例等相关内容。在学习完本文之后,读者应该对该运算符的使用和作用具有清晰的认识,可以更加熟练地运用该运算符完成实际开发工作。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/679730.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能--深度神经网络

目录 🍉引言 🍉深度神经网络的基本概念 🍈神经网络的起源 🍍 神经网络的基本结构 🍉深度神经网络的结构 🍈 卷积神经网络(CNN) 🍈循环神经网络(RNN&…

期权懂基础知识分享:场外期权怎么做?

今天带你了解期权懂基础知识分享:场外期权怎么做?场外个股期权是一种金融工具,用于在股票市场之外交易。 场外期权怎么做? 签订框架协议:个人需要与机构签订场外期权框架协议,通常无需单独开立账户。 询价…

Web3.0区块链技术开发方案丨中心化与去中心化交易所开发

随着区块链技术的不断发展和普及,加密货币交易所成为数字资产市场中的关键组成部分。其中,中心化交易所(CEX)和去中心化交易所(DEX)是两种主要的交易所类型。本文将探讨Web3.0区块链技术开发方案&#xff0…

【Postman接口测试】第四节.Postman接口测试项目实战(中)

文章目录 前言五、Postman断言 5.1 Postman断言介绍 5.2 响应状态码断言 5.3 包含指定字符串断言 5.4 JSON数据断言六、参数化 5.1 Postman参数化介绍 5.2 Postman参数化实现 5.3 针对项目登录接口参数化实现 总结 前言 五、Postman断言 5.1 Postman断言介…

Android 应用权限

文章目录 权限声明uses-permissionpermissionpermission-grouppermission-tree其他uses-feature 权限配置 权限声明 Android权限在AndroidManifest.xml中声明&#xff0c;<permission>、 <permission-group> 、<permission-tree> 和<uses-permission>…

TSINGSEE青犀视频汇聚机房动环智能监控方案,提升机房安全稳定性

一、背景需求 在当今信息化时代&#xff0c;机房作为数据中心的核心设施&#xff0c;承载着重要的网络设备和数据存储设备&#xff0c;其正常运行对于企业的数据安全和业务连续性至关重要。机房内部设备众多&#xff0c;且运行过程中涉及大量的数据交换和传输。一旦发生安全事…

[C][数据结构][时间空间复杂度]详细讲解

目录 0.铺垫1.时间复杂度 -- 衡量算法的运行快慢1.是什么&#xff1f;2.大O的渐进表示法 2.空间复杂度 - 衡量算法所需要的额外空间3.常见复杂度对比 0.铺垫 时间是累计的空间是不累计的&#xff0c;可以重复利用 1.时间复杂度 – 衡量算法的运行快慢 1.是什么&#xff1f; …

量化研究---大qmt实盘实现禄得可转债策略轮动

前面写了一个强大的可转债自定义系统&#xff0c;我们可以利用这个快速对接到大qmt,我提供实时数据支持 量化研究---强大的可转债分析系统上线&#xff0c;提供api&#xff0c;实时数据支持 打开网页 http://120.78.132.143:8023/ 强大可转债选择系统 http://120.78.132.143:8…

【TB作品】msp430g2553单片机,DS18B20,温控装置,iic OLED

功能 /* 硬件&#xff1a;DS18B20OLEDIIC绿灯红灯一个按键蜂鸣器加热片功能&#xff1a;1 显示温度2 显示临界值&#xff0c;按键可以加减临界值&#xff0c;临界值在20~35之间可调。3 实际温度高于&#xff08;临界值1&#xff09;后绿灯亮表示降温。4 实际温度低于&#xf…

【云原生_K8S系列】什么是 Kubernetes Pod?用实际例子解释

Kubernetes&#xff08;简称K8S&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化容器化应用的部署、扩展和管理。在Kubernetes中&#xff0c;Pod是最小的部署单元。理解Pod的概念对于掌握Kubernetes至关重要。本篇文章将详细解释什么是Kubernetes Pod&#xff0c;并…

【机器学习】LoRA:大语言模型中低秩自适应分析

LoRA&#xff1a;大型语言模型中的低秩自适应调优策略 一、LoRA的原理与优势二、LoRA在编程和数学任务中的性能表现四、总结与展望 随着人工智能技术的飞速发展&#xff0c;大型语言模型已成为自然语言处理领域的明星技术。然而&#xff0c;这些模型通常拥有数以亿计的参数&…

vivado BD_PIN、BD_PORT

BD_PIN 描述 块设计引脚或bd_pin对象是块设计上的逻辑连接点 单间牢房块设计引脚允许抽象单元的内部逻辑&#xff0c;并且 简化以便于使用。引脚可以是标量引脚或总线引脚&#xff0c;并且可以出现在层次结构上 块设计单元或叶级单元。 相关对象 如图所示&#xff0c;块设计引脚…

Mac保姆级配置jdk环境

1.找到下载的jdk环境 通常是这个。留作备用 /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/bin 然后新开一个终端下执行以下命令 sudo vim ~/.bash_profile 进入编辑模式后 按 i 开始添加内容结束编辑模式按 ESC结束后保存输入 :wq!不保存输入 :q! 注意…

react native中内容占位效果

react native中内容占位效果 效果实例图实例代码skeleton.jsx 效果实例图 实例代码skeleton.jsx import React, { useEffect, useRef } from "react"; import { Animated, StyleSheet, View } from "react-native"; import { pxToPd } from "../../.…

【Lua】IntelliJ IDEA 写注释或选中变量单词时偶尔会选中相邻的内容或下一行内容

例如: --UI代码local a 0 当你想在a变量上方加一行 --UI代码注释时&#xff0c;会发现敲打daima中文拼音时&#xff08;还未按回车&#xff09;就会选中当前行以及下一行前半部分。 打完按空格就会变成这样子&#xff01; 原因是因为开启了英文检测&#xff0c;需要关掉它。 …

LabVIEW实现汽车逆变器功能测试系统

​介绍了如何利用LabVIEW开发汽车逆变器&#xff08;包括功率板和控制板&#xff09;的自动测试设备&#xff08;ATE&#xff09;&#xff0c;实现对额定800V电压、300A电流的逆变器进行功能测试。系统通过CAN2.0通讯协议&#xff0c;实现电机控制、温度传感器监测、电压校验和…

js中弹框有那些,提示框、请求成功弹窗、请求失败弹框等

我这里写的是个人推荐仅供参考&#xff1a; 效果图&#xff1a; 代码实现 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><script src"js/jquery-3.6.3.js"></script><style&g…

el-table的一些操作

1.el-table实现全部选择和全部取消 其实非常简单&#xff0c;el-table自带的都有方法toggleAllSelection()和clearSelection() 表格数据&#xff1a; <el-button clickcheckAll>全选</el-button> <el-button clickcancelAll>反选</el-button>// 全…

SQL进阶day10————多表查询

1嵌套子查询 1.1月均完成试卷数不小于3的用户爱作答的类别 我的代码&#xff1a;思路就是这么个思路&#xff0c;反正没有搞出来当月均完成试卷数 select tag,count(submit_time) tag_cnt from exam_record er join examination_info ei on er.exam_id ei.exam_id where uid…

【从零开始部署SAM(Segment Anything Model )大模型 3 Ubuntu20 离线部署 C++】

这里是目录 总览环境配置模型准备Moble SAM onnx模型获取Moble SAM pre onnx模型获取 运行cmakelist 运行结果 总览 相比于使用python离线部署SAM大模型&#xff0c;C要麻烦的多&#xff0c;本篇的部署过程主要基于项目&#xff1a;https://github.com/dinglufe/segment-anyth…