个性化阅读
专注于IT技术分析

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中使用运算符

让我们看看真正的使用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 class

class Test4{
public static void main(String args[]){
Printable p=new B();
Call c=new Call();
c.invoke(p);
}
}
Output: b method
赞(0)
未经允许不得转载:srcmini » Java instanceof操作符

评论 抢沙发

评论前必须登录!