Java instanceof操作符

本文概述

  • java instanceof操作符的另一个例子
  • 运算符在java null值的变量
  • 向下类型转换与java instanceof操作符
java instanceof操作符是用来测试对象是否指定类型的实例(类或子类或接口)。
java也称为类型实例的比较运算符,因为它比较类型的实例。它返回真或假。如果我们使用instanceof操作符与任何null值的变量,它返回false。
java实例的简单示例
让我们看看实例操作符的简单示例测试当前类。
class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1); //true } }

Output:true

一个子类的对象类型也是一个父类的类型。例如,如果狗延伸动物然后可以称为对象的狗狗或者类动物。
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

运算符在java null值的变量如果我们使用instanceof操作符和变量null值,返回false。让我们看看下面的例子中,我们使用instanceof操作符的null值的变量。
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操作符。
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操作符显示在下面的例子:
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

让我们来仔细看看,这被称为一个实际对象,是狗类的一个对象。所以如果我们沮丧,它很好。但是将会发生什么如果我们写:
Animal a=new Animal(); Dog.method(a); //Now ClassCastException but not in case of instanceof operator

理解真正的在java中使用运算符
【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){//upcasting if(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

    推荐阅读