Java教程

Java instanceof

java instanceof运算符用于测试对象是否是指定类型(类,子类或接口)的实例。
instanceof in java也称为类型 比较运算符,因为它会将实例与类型进行比较。它返回true或false。如果我们将instanceof运算符与任何具有空值的变量一起应用,它将返回false。

java instanceof 的简单示例

让我们看一下实例运算符的简单示例,它在其中测试当前类。
class Simple1{
    public static void main(String args[]){
        Simple1 s=new Simple1();
        System.out.println(s instanceof Simple1);
    //true }
}
Output:true

子类类型的对象也是父类的类型。例如,如果Dog扩展了Animal,则Dog或Animal类可以引用Dog的对象。

运算符的Java instanceof的另一个示例

class Animal{
}
class Dog1 extends Animal{
    //Dog inherits Animal public static void main(String args[]){
        Dog1 d=new Dog1();
        System.out.println(d instanceof Animal);
    //true }
}
Output:true

instanceof在Java中带有变量的值为空

如果我们将instanceof运算符与带有null值,它返回false。让我们看看下面给出的示例,其中我们将instanceof运算符与具有空值的变量一起应用。
class Dog2{
    public static void main(String args[]){
        Dog2 d=null;
        System.out.println(d instanceof Dog2);
    //false }
}
Output:false

使用java instanceof运算符进行向下转换

当子类类型引用父类的对象时,称为垂头丧气。如果直接执行,编译器将给出编译错误。如果通过类型转换执行它,则在运行时将引发ClassCastException。但是,如果我们使用instanceof运算符,则可以向下转换。
Dog d=new Animal();
//Compilation error
如果我们通过类型转换执行向下转换,则会在运行时引发ClassCastException。
Dog d=(Dog)new Animal();
//Compiles successfully but ClassCastException is thrown at runtime

使用instanceof进行向下转换的可能性

让我们来看一个示例,其中instanceof运算符可以进行向下转换。
class Animal {
}
class Dog3 extends Animal {
    static void method(Animal a) {
        if(a instanceof Dog3){
            Dog3 d=(Dog3)a;
            //downcasting System.out.println("ok downcasting performed");
        }
    }
    public static void main (String [] args) {
        Animal a=new Dog3();
        Dog3.method(a);
    }
}
Output:ok downcasting performed

不使用Java instanceof进行向下转换

也可以不使用显示的instanceof运算符进行向下转换在以下示例中:
class Animal {
}
class Dog4 extends Animal {
    static void method(Animal a) {
        Dog4 d=(Dog4)a;
        //downcasting System.out.println("ok downcasting performed");
    }
    public static void main (String [] args) {
        Animal a=new Dog4();
        Dog4.method(a);
    }
}
Output:ok downcasting performed
让我们仔细看一下,由a引用的实际对象是Dog类的对象。因此,如果我们对此不满意,那就很好。但是如果我们写:
Animal a=new Animal();
Dog.method(a);
//Now ClassCastException but not in case of instanceof operator

了解java中instanceof的实际用法

通过下面给出的示例,让我们来看一下instanceof关键字的实际用法。
interface Printable{
}
class A implements Printable{
    public void a(){
        System.out.println("a method");
    }
}
class B implements Printable{
    public void b(){
        System.out.println("b method");
    }
}
class Call{
    void invoke(Printable p){
        //upcastingif(p instanceof A){
            A a=(A)p;
            //Downcasting a.a();
        }
        if(p instanceof B){
            B b=(B)p;
            //Downcasting b.b();
        }
    }
}
//end of Call classclass Test4{
    public static void main(String args[]){
        Printable p=new B();
        Call c=new Call();
        c.invoke(p);
    }
}
Output: b method
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4