instanceof操作符

在进行强制类型转换的时候为了防止出现ClassCastException,需要进行判断,可以使用instanceof操作符。下面分别介绍instanceof操作符的基本用法、使用的场合以及注意事项。

1、基本用法

instanceof操作符用于判断某个对象是否是某个类型的对象。

格式如下:

o instanceof C

o表示对象,C表示类型,如果o是C的对象表达式返回true,否则返回false。

下面的代码用于判断参数是否为整数:

public void f(Object o){

if(o instanceof Integer){

System.out.println("参数是整数!");

}

}

2、使用场合

在对一个对象进行强制类型转换的时候,如果类型不匹配,就会产生java.lang.ClassCastException异常。例如下面的代码:

Animal a = new Cat();

Dog d = (Dog)a;

上面的代码从语法上看没有问题,但是逻辑上是要把猫强制转换成狗,我们知道它不能转换,事实上也不能转换,程序能够编译通过,但是运行的时候就会报错:java.lang.ClassCastException.

这个问题很容易发现,有时候却不怎么容易发现,例如下面的代码:

public void f(Animal a){

Dog d = (Dog)a;

...

}

参数的类型是Animal,能不能强制转换成Dog呢?不一定,所以为了避免因为a不是Dog而转换出错,就需要使用instanceof进行判断了。上面的代码可以改成下面的样子:

public void f(Animal a){

if(a instanceof Dog){

Dog d = (Dog)a;

...

}

}

这样就可以避免ClassCastException异常了。

3、使用时候的注意事项

a)在使用的时候,instanceof前面的类型是已知的(例如上面的例子中a的类型是Animal),instanceof后面的类型应该与声明变量使用的类型有关系,通常应该是子类。例如下面的代码:

Number x = 0;
System.out.println(x instanceof Integer); // 正确
System.out.println(x instanceof Number);// 正确
System.out.println(x instanceof Object);// 正确
System.out.println(x instanceof String); // 错误

第1行声明了x的类型是Number。第2行判断x是不是Integer类型,是合法的,因为Integer是Number的子类。第3行是合法的,就是Number类型本身。第3行也是合法的,因为Object是Number的祖先类。第5行是错误的,因为String类与Number类没有任何关系。实际上第3行和第4行的结果肯定是true。有意义的是第2行。

b)在进行判断的时候指的是实例而不是引用,例如下面的代码将输出false。

String tt=null;
System.out.println(tt instanceof String);

使用String定义了引用tt,但是没有指向任何实例,所以要判断它是不是String的实例,返回值就是false,因为他不是实例。

李绪成 优快云 Blog:http://blog.youkuaiyun.com/javaeeteacher
优快云学生大本营:
http://student.youkuaiyun.com/space.php?uid=124362
如果喜欢我的文章,就加我为好友:
http://student.youkuaiyun.com/invite.php?u=124362&c=7be8ba2b6f3b6cc5

华为OD机试 - 打印机队列 - 优先队列(Python/JS/C/C++ 双机位C卷 200分) 这个问题要求模拟打印机的文件调度过程,关键在于正确处理每个打印机队列中的文件优先级和文件进入队列的顺序。优先级处理:每个文件有一个 1 到 10 的优先级,数字越大优先级越高,打印机应首先处理优先级最高的文件。在打印机 1 的队列中插入了 3 个文件,分别有不同的优先级,其中编号 3 的文件优先级最高,先被取出。因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10 不同的 优先级,其中数字越大优先级越高。在打印机 2 的队列中插入了 1 个文件,优先级为 1,因此它被首先取出。 阅读详情

相关推荐

基于AXI PCIE IP的FPGA PCIE卡示意图

如果在上图中的AXI互联IP上再连接一个带AXI Slave接口的BRAM控制器,这个BRAM控制器连接一个BRAM,Host PC在系统主存中分配了一些不连续的内存,Host PC可以将这些内存段的起始地址(当然要先转为PCIE总线地址)写到AXI总线上的BRAM中,这样AXI CDMA读取BRAM,将读取到的PCIE总线基地址写到AXIPCIE寄存器块中的AXIBAR2PCIEBAR_n寄存器中,这样就实现了SG DMA。通过动态改变AXIBAR2PCIEBAR_n寄存器的值,可以实现多通道DMA。

csdn_gddf102384398的博客 1624

Java-用instanceof关键字进行类型判断

判断引用的类是猫还是狗? 如何才能知道一个父类引用的对象,本来是什么子类? 格式: 对象 instanceof 类名称 这将会得到一个boolean值结果,也就是判断前面的对象能不能当做后面类型的实例。 public class Demo02Instanceof { public static void main(String[] args) { Animal animal = new Cat();//本来是一只猫 或 者 狗 animal.eat();//猫吃鱼 //如果希望调用

weixin_46370945的博客 1102

图解电动汽车:电动汽车主要参数

动力性指标 汽车的动力性指标主要有最高车速、加速时间、最大爬坡等,体现了汽车在行驶过程中能达到的极限运动水平。对于电动汽车,其动力性由搭载的驱动电动机决定,主要的参数包括最大扭矩、额定功率、最大功率、最大转速等。 功率是指物体在单位时间内所做的功的多少,是描述做功快慢的物理量,单位是 kW。 扭矩是指机械元件转动的力矩,也称转矩,表示转动力量的大小,单位是 N·m。 转速是指发动机/电动机的转速,的单位是 rpm,即转每分钟。额定转速是指在额定功率下电动机的转速,最大转速则是在最大功率下电动机的转速。

程序员「阿基米东」的编程之旅 2万+

java中的instanceof 关键字以及作用

java中的instanceof 关键字以及作用

gulang00的博客 975

数据分析:蛋白质组的GO term的富集分析详解

在获取差异表达蛋白质的数据之后,依据蛋白质与基因的对应映射关系,开展GO(Gene Ontology)term的富集分析。通过这一分析流程,能够精准地识别出不同实验组中过表达基因所关联的显著富集的GO term通路。这些富集的GO term通路为后续的生物学研究提供了关键线索,有助于深入探究基因功能、揭示潜在的生物学机制,从而推动生物学发现的进程。

专注生信领域 1368

MFC Windows 程序设计[105]之彩色滚动条(附源码)

MFC是微软公司提供的一个类库(class libraries),用以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。有很多初学MFC的小伙伴们都觉得MFC比较难学,看书吧,看了就忘了,网上的一些教程又是写的含糊不清,故而学习起来很吃力...... 故此,本专栏亲自研究,实践,由易到难,层层深入,将调试过程中所遭所遇进行详细讲解,注意事项进行一一列举,希望能够帮助到各位初学MFC的小伙伴,避免走弯路,费时费力。

hnjzfwy的博客 518

细说(java)引用类型的强制转化

父类与子类之间的转换分为向上转型和向下转型 向上变型: 子类的小范围转换为父类的大范围; 相当于把子类当作父类,从而失去了其子类的新增属性; 写法:父类名 对象=new 子类名(); Animal animal2=new Cat(); 向下转型: ...

m0_66460650的博客 665

RAP BDL 里的 field ( readonly ) 到底控制了什么?——从语法到运行时的全景解析

RAP行为定义中的只读字段控制 摘要:该代码片段展示的是RAP(ABAP RESTful Application Programming)行为定义语言(BDL)中的字段控制语法,用于声明业务对象中需由框架自动维护的只读字段。field ( readonly )语句将订单ID和审计字段(CreatedBy/CreatedAt等)标记为只读,确保这些字段在更新阶段不可修改。在managed场景下,RAP框架会自动处理这些行政性数据的写入:创建时填充创建信息,更新时刷新变更记录,并利用LocalLastChang

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 157

Java千问:instanceof运算符用法详解

Java语言当中提供了一个叫做instanceof的运算符。很多教科书上对这个运算符的介绍并不详细,只是简单的说这个运算符是用来判断某个对象是不是属于某种类型。我们现在就用一篇短文介绍一下instanceof的运算符的作用和注意事项。请看下面的代码片段 代码中定义了一个接口和两个类。大家记清楚它们之间的关系:Person类实现了Moveable接口,Student类继承了Person类。紧接...

穆哥学堂--Java学习园地 2817

手把手教你学Simulink--电机控制架构与算法实现​场景示例:基于Simulink的电机速度环PID调节仿真

本文带你完成了电机速度环PID参数的科学整定,实现了:✅ 理解了速度环的级联系统特性与关键参数影响工程整定法(理论初值)系统辨识法(参数未知时)✅ PID Tuner自动调参(推荐!自动调参兼具快速性与鲁棒性✅ 学会了前馈补偿抗饱和等工程实用技巧。

MHD0815的博客 653

【YOLOv8科研级优化】基于YOLOv9的GELAN模块重构C2f架构,显著提升模型精度与推理效率

打开确保模型解析器能识别GELANBlock模块。通过将YOLOv9的GELAN模块集成到YOLOv8的C2f模块中,我们实现了一个“强特征表达+高效计算”的目标检测模型。这个改进不仅在工程上能提升复杂场景下的检测效果,更在科研上提供了“多分支特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的改进中,帮你在论文中打造独特的研究点。

FJN110的博客 113

JavaScript typeof 操作符和 instanceof 操作符

typeof 操作符可以确定值的原始类型,而 instanceof 操作符用于确保值的引用类型。typeof 操作符最适合用来判断一个变量是否为原始类型。更确切地说,它是判断一个变量是否为字符串、数值、布尔值或 undefined 的最好方式。如果值是对象或 null,那么 typeof 返回 "object"。typeof 操作符在用于检测函数时也会返回 "function"。

jyn15159的博客 889

【网络安全 | 渗透工具】Githack工具安装及使用教程详析

本文仅分享Githack工具基本安装及使用相关知识不承担任何法律责任。Git是一个非常流行的开源分布式版本控制系统,它被广泛用于协同开发和代码管理。许多网站和应用程序都使用Git作为其代码管理系统,并将其部署到生产环境中以维护其代码库。然而,在配置不当的情况下,可能会导致.git文件夹被直接部署到线上环境中,这可能会导致Git泄露问题。可通过githack下载泄露的Git存储库,以获取包含未加密密码、凭据和敏感信息的站点代码库。使用githack下载Git存储库的方法有两种。本文仅分享。

等风来 3万+

Java的instanceof操作符

Java的instanceof操作符

qq_56299755的博客 107

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

教妹学Java(三十八):instanceof 操作符的用法

方法,它的参数类型为 I,在方法体重,通过 instanceof 操作符判断参数 i 到底是 A 还是 B,如果是 A,对 i 向下转型为 A,然后调用。二哥肝了两天两夜,《程序员不可或缺的软实力》第一版强势来袭,纯手敲,足足 20 万字精华文章,贯穿了我十余年的编程生涯,涉及到了生活和工作中的方方面面,“三妹,instanceof 操作符我们就学到这里吧,它的用法我相信你一定全部掌握了。“好的,二哥,我这就去练习去。方法,如果是 B ,对 i 向下转型为 B,然后调用。方法,在 Call 类中,有一个。

2501_90425293的博客 943

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

手写instanceof、手写new操作符

【代码】手写instanceof、手写new操作符。

weixin_45980065的博客 906

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

鸿蒙中,类型检查typeof 和 instanceof 操作符

摘要: 鸿蒙应用开发中,typeof和instanceof是类型检查的核心操作符,但适用场景不同。typeof用于检测基本数据类型(如"number"、"string"),但对对象仅返回"object";instanceof则验证对象是否为特定类的实例(如数组、自定义组件)。关键区别在于:typeof针对原始类型,instanceof适用于引用类型。鸿蒙开发中建议结合两者实现类型守卫,例如判断API返回数据或组件类型,同时注意typeof null

梦想不只是梦与想的博客 1510

php instanceof操作符

<br /><strong><span style="color: #ff6600;">instanceof </span></strong>操作符是PHP中的一个比较操作符。它接受左右两边的参数,并返回Boolean类型的值。这个操作符是用来确定对象的某个实例是否为特定的类型,或者是否从某个类型继承,又或者是否实现了某个特定的接口。<br /> <hr><br />     说明: “类型”代表的是某个类的运行时定义。PHP在解析类或者接口定义时,会创建一个“类型”。<br /> <hr>

tianyi_lee的专栏 793

JAVA:instanceof操作符使用

public class Quadrangle2 { public static void draw(Quadrangle2 q){ } } class Square extends Quadrangle2{ } class Anything2{ } class Parallelogram extends Quadrangle2{ public static void main(String args[]){ Quadrangle2 q=new Quadran

weixin_44396481的博客 184

关于instanceof操作符

Example:    Class Teacher and Student are subclass of class Person.    Person p;    Teacher t;    Student s;    p, t and s are all non-null.    if(t instanceof Person) {  s = (Student)t; }

1886

Java中instanceof操作符

在程序中执行向下转型操作时,如果父类对象不是子类对象的实例,就会发生ClassCastException异常,所以在执行向下转型之前需要养成一个良好的习惯,就是判断父类对象是否为子类对象的实例。这个判断通常使用instanceof操作符来完成。 可以使用instanceof操作符判断是否一个类实现了某个接口,也可以用它来判断一个实例对象是否属于一个类。 instanceof的语法格式如下: my...

weixin_44798518的博客 282

instanceof 操作符

instanceof 操作符用于判断一个引用类型所引用的对象是否是一个类的实例。instanceof 操作符左边的操作元是一个引用类型,右边的操作元是一个类名或接口。 eg: obj instanceof ClassName obj instanceof InterfaceName 一个类的实例包括类本身的实例,以及所有直接或间接的子类的实例。 instance

Fish3812的专栏 884

instanceof是一个二元操作符

instanceof是一个二元操作符,不是方法,不是类方法。

qq_43118674的博客 65

操作符 instanceof

操作符 instanceofhttp://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html判断某个实例对象类型,包括子类与实现 You can use it to test if an object is an instance of a class, an instance of a subclass, or an insta

zwt0909的博客 380

instanceof 操作符 instanceof 操作符 和接口

instanceof 操作符 result =  对象名称 instanceof 类型 参数: result:布尔类型。 对象名称:必选项,任意对象表达式。 类型:必选项,任意已定义的类,可以是api中的类,也可以说自定义的类。 说明:如果对象是这个类型的实例,则instanceof运算符返回true。如果对象不是指定类的一个实例,或者对象是null,则返回false Objec

afuturezww的博客 469
上一篇: 程序是写给人用的
下一篇: 如果有这样的机会,你应该抓住
Java_Web_Book
博客等级 码龄18年 8粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值