猿教程 Logo

java instanceof

java instanceof运算符用于测试对象是否是指定类型(类或子类或接口)的实例。

java中的instanceof也称为类型比较运算符,因为它将类型与实例进行比较。 它返回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的对象可以通过Dog或Animal类来引用。


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

对为Null的变量使用instanceof

如果我们对具有空值的变量应用instanceof运算符,则返回false。 让我们看看下面给出的例子,其中我们将instanceof运算符应用于具有空值的变量。

相关实例:

class Dog2{
 public static void main(String args[]){
  Dog2 d=null;
  System.out.println(d instanceof Dog2);//false
 }
}
Output:false

使用java instanceof运算符下转换

当子类类型引用父类的对象时,它被称为downcasting。 如果我们直接执行它,编译器会出现编译错误。 如果你通过类型转换来执行,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

让我们仔细看看这个,被引用的实际对象是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){//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


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Java/downcasting-with-instanceof-operator.html