26. Java中,使用`instanceof `运算符

26. Java中,使用instanceof 运算符

Java 中,instanceof 运算符用于测试一个对象是否是某个类的实例、某个类的子类实例,或者是否实现了某个接口。它帮助确定对象的实际类型,从而可以根据类型执行不同的操作。

运算符语法
java 复制代码
object instanceof ClassName
  • object:要测试的对象。
  • ClassName:要测试的类或接口的类型。

如果 objectClassName 类或其子类的实例,或者是实现了 ClassName 接口的类的实例,instanceof 运算符将返回 true,否则返回 false

示例:测试对象的类型

以下是一个使用 instanceof 运算符的示例:

java 复制代码
class InstanceofDemo {
    public static void main(String[] args) {

        Parent obj1 = new Parent();
        Parent obj2 = new Child();

        System.out.println("obj1 instanceof Parent: "
            + (obj1 instanceof Parent));  // true
        System.out.println("obj1 instanceof Child: "
            + (obj1 instanceof Child));   // false
        System.out.println("obj1 instanceof MyInterface: "
            + (obj1 instanceof MyInterface));  // false
        System.out.println("obj2 instanceof Parent: "
            + (obj2 instanceof Parent));  // true
        System.out.println("obj2 instanceof Child: "
            + (obj2 instanceof Child));   // true
        System.out.println("obj2 instanceof MyInterface: "
            + (obj2 instanceof MyInterface));  // true
    }
}

class Parent {}

class Child extends Parent implements MyInterface {}

interface MyInterface {}

程序输出:

java 复制代码
obj1 instanceof Parent: true
obj1 instanceof Child: false
obj1 instanceof MyInterface: false
obj2 instanceof Parent: true
obj2 instanceof Child: true
obj2 instanceof MyInterface: true
解释:
  1. obj1 instanceof Parentobj1Parent 类的实例,因此返回 true
  2. obj1 instanceof Childobj1Parent 类的实例,而不是 Child 类的实例,因此返回 false
  3. obj1 instanceof MyInterfaceobj1Parent 类的实例,Parent 类并没有实现 MyInterface 接口,因此返回 false
  4. obj2 instanceof Parentobj2Child 类的实例,而 Child 类是 Parent 类的子类,因此返回 true
  5. obj2 instanceof Childobj2Child 类的实例,因此返回 true
  6. obj2 instanceof MyInterfaceobj2Child 类的实例,而 Child 类实现了 MyInterface 接口,因此返回 true

特别注意

  • null :任何对象实例和类进行比较时,null 总是返回 false。例如,null instanceof SomeClass 总是返回 false
java 复制代码
String str = null;  
System.out.println(str instanceof String); // false ❌  
  • 多态支持instanceof 运算符非常有用,尤其是在使用继承和多态时,它可以帮助判断一个对象是否属于某个类型或其子类型。\
java 复制代码
Shape shape = new Circle();
if (shape instanceof Circle) {
    // 处理圆形特有的逻辑
    System.out.println("This is a circle");
} else if (shape instanceof Rectangle) {
    // 处理矩形逻辑
    System.out.println("This is a rectangle");
}
java 复制代码
class Shape{
}
class Circle extends Shape{
}
class Rectangle extends Shape{
}
  • 不能用于基本类型
java 复制代码
int num = 10;  
// System.out.println(num instanceof Integer); // 编译错误 ❌  

总结

  • instanceof 运算符用于检查对象是否是某个类的实例或某个接口的实现类。
  • 它支持继承和接口实现检查。
  • instanceof 运算符常用于条件判断中,根据对象的实际类型执行不同的操作。
  • 使用 instanceof 时,null 永远不是任何类型的实例,因此总是返回 false

通过使用 instanceof 运算符,您可以确保程序在运行时根据对象的实际类型做出正确的判断。

相关推荐
unclecss3 分钟前
从根儿上把接口加速 10 倍:Spring Boot 3 + 本地缓存「金字塔」实战
spring boot·后端·缓存·性能优化·caffe
沧澜sincerely9 分钟前
Spring Boot 后端实现 WebSocket
spring boot·后端·websocket
一 乐12 分钟前
旅游出行|基于Springboot+Vue的旅游出行管理系统设计与实现(源码+数据库+文档)
前端·数据库·vue.js·spring boot·后端·旅游
JaguarJack15 分钟前
现代高效 PHP 开发的最佳实践
后端·php
Victor3561 小时前
Redis(164)如何使用Redis实现排行榜?
后端
Victor3561 小时前
Redis(165)如何使用Redis实现推荐系统?
后端
百万蹄蹄向前冲5 小时前
Trae Genimi3跟着官网学实时通信 Socket.io框架
前端·后端·websocket
狂炫冰美式6 小时前
TRAE SOLO 驱动:重构AI模拟面试产品的复盘
前端·后端·面试
x***38168 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
韩立学长9 小时前
基于Springboot课堂教学辅助系统08922bq1(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端