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 运算符,您可以确保程序在运行时根据对象的实际类型做出正确的判断。

相关推荐
风象南5 小时前
我把大脑开源给了AI
人工智能·后端
橙序员小站10 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
怒放吧德德10 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆11 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
开心就好202513 小时前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios
悟空码字13 小时前
告别“屎山代码”:AI 代码整洁器让老项目重获新生
后端·aigc·ai编程
小码哥_常13 小时前
大厂不宠@Transactional,背后藏着啥秘密?
后端
奋斗小强13 小时前
内存危机突围战:从原理辨析到线上实战,彻底搞懂 OOM 与内存泄漏
后端
小码哥_常14 小时前
Spring Boot接口防抖秘籍:告别“手抖”,守护数据一致性
后端
心之语歌14 小时前
基于注解+拦截器的API动态路由实现方案
java·后端