instanceof到底怎么判断的

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //就是判断对象的原型链(__proto__)和构造函数的protorype指的是不是同一个对象
    function P(){}
    let p  = new P
    console.log(p instanceof P) //true
    console.log(p instanceof Object) //true
    //所以不能得出自己真正的构造函数是谁

    console.log(p instanceof Array) //false
</script>
</body>
</html>
### 如何使用 `instanceof` 关键字进行类型判断 在 Java 中,`instanceof` 关键字用于检查一个对象是否是某个特定类型或其子类的实例。它返回一个布尔值,表示对象是否可以被视为指定类型的实例[^1]。 以下是 `instanceof` 的基本语法: ```java object instanceof type ``` - `object` 是要检查的对象。 - `type` 是要检查的类型,可以是类、接口或数组类型[^2]。 #### 示例代码 以下是一个完整的示例,展示如何使用 `instanceof` 进行类型判断: ```java // 抽象动物类 public abstract class Animal { public abstract void eat(); } // 猫类 public class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼!"); } // 猫的特有方法 public void catchMouse() { System.out.println("猫捉老鼠"); } } // 狗类 public class Dog extends Animal { @Override public void eat() { System.out.println("狗吃骨头!"); } // 狗的特有方法 public void watchHouse() { System.out.println("狗看家护院"); } } // 测试类 public class Demo02Instanceof { public static void main(String[] args) { Animal animal = new Cat(); // 创建一个 Cat 对象并赋值给 Animal 类型变量 animal.eat(); // 调用父类方法 // 判断 animal 是否为 Dog 类型 if (animal instanceof Dog) { Dog dog = (Dog) animal; // 向下转型 dog.watchHouse(); // 调用子类特有方法 } // 判断 animal 是否为 Cat 类型 if (animal instanceof Cat) { Cat cat = (Cat) animal; // 向下转型 cat.catchMouse(); // 调用子类特有方法 } } } ``` #### 代码解析 1. 在上述代码中,`Animal animal = new Cat();` 表明 `animal` 是一个父类引用,指向了子类 `Cat` 的实例。 2. 使用 `if (animal instanceof Dog)` 和 `if (animal instanceof Cat)` 来判断 `animal` 的实际类型[^3]。 3. 如果判断结果为 `true`,则可以通过向下转型调用子类特有的方法。 #### 注意事项 - `instanceof` 的左侧操作数必须是一个对象引用,不能是 `null` 或基本数据类型。 - 如果左侧操作数为 `null`,则 `instanceof` 的结果始终为 `false`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值