java 中的instanceof 運(yùn)算符是用來在運(yùn)行時(shí)指出對(duì)象是否是特定類的一個(gè)實(shí)例。instanceof通過返回一個(gè)布爾值來指出,這個(gè)對(duì)象是否是這個(gè)特定類或者是它的子類的一個(gè)實(shí)例。
用法:
result = object instanceof class
參數(shù):
Result:布爾類型。
Object:必選項(xiàng)。任意對(duì)象表達(dá)式。
Class:必選項(xiàng)。任意已定義的對(duì)象類。
說明:
如果 object 是 class 的一個(gè)實(shí)例,則 instanceof 運(yùn)算符返回 true。如果 object 不是指定類的一個(gè)實(shí)例,或者 object 是 null,則返回 false。
例子如下:
package com.instanceoftest;
interface A{}
class B implements A{
}
class C extends B {
}
class instanceoftest {
public static void main(String[] args){
A a=null;
B b=null;
boolean res;
System.out.println("instanceoftest test case 1: ------------------");
res = a instanceof A;
System.out.println("a instanceof A: " + res);
res = b instanceof B;
System.out.println("b instanceof B: " + res);
System.out.println("\ninstanceoftest test case 2: ------------------");
a=new B();
b=new B();
res = a instanceof A;
System.out.println("a instanceof A: " + res);
res = a instanceof B;
System.out.println("a instanceof B: " + res);
res = b instanceof A;
System.out.println("b instanceof A: " + res);
res = b instanceof B;
System.out.println("b instanceof B: " + res);
System.out.println("\ninstanceoftest test case 3: ------------------");
B b2=(C)new C();
res = b2 instanceof A;
System.out.println("b2 instanceof A: " + res);
res = b2 instanceof B;
System.out.println("b2 instanceof B: " + res);
res = b2 instanceof C;
System.out.println("b2 instanceof C: " + res);
}
}
/*
result:
instanceoftest test case 1: ------------------
a instanceof A: false
b instanceof B: false
instanceoftest test case 2: ------------------
a instanceof A: true
a instanceof B: true
b instanceof A: true
b instanceof B: true
instanceoftest test case 3: ------------------
b2 instanceof A: true
b2 instanceof B: true
b2 instanceof C: true
instanceof是Java的一個(gè)二元操作符,和==,>,<是同一類東東。由于它是由字母組成的,所以也是Java的保留關(guān)鍵字。它的作用是測(cè)試它左邊的對(duì)象是否是它右邊的類的實(shí)例,返回boolean類型的數(shù)據(jù)。
用法: 某個(gè)實(shí)例對(duì)象 instanceof 某個(gè)類名
instanceof 通常用于根據(jù)不同的實(shí)例調(diào)用不同的方法:
一、在有繼承關(guān)系的類中我們可以通過多態(tài)來調(diào)用不同實(shí)例中的不同方法:
例1:
有三個(gè)類,類名以及它們之間的關(guān)系如下
Animal (Superclass) Dog(Subclass) Cat(Subclass)
則可得出如下對(duì)象
Animal animal =new Animal (); ====》animal instanceof Animal 返回 true
Dog dog=new Dog();====》dog instanceof Dog 返回 true
Cat cat=new Cat();====》cat instanceof Cat 返回 true
Animal dog=new Dog();====》dog instanceof Animal 返回 true
Animal cat=new Cat();====》cat instanceof Animal 返回 true
Animal dog=new Dog();
Animal cat=new Cat();
List list = new ArrayList();
list.add(dog);
list.add(cat);
Iterator it = list.iterator();
while (it.hasNext()) {
it.next().animalDo();
}
在這里我們可以在Dog與Cat類中重寫Animal中的animalDo方法,通過調(diào)用animalDo方法,然后會(huì)自動(dòng)根據(jù)不同的實(shí)例調(diào)用不同類中的方法.
二、在沒有繼承關(guān)系的類中,我們可以通過instanceof來判斷當(dāng)前實(shí)例,然后很據(jù)不同實(shí)例調(diào)用不同方法:
例2:
Station s = new Station();
Cell c = new Cell();
List list = new ArrayList();
list.add(s);
list.add(c);
Iterator it = list.iterator();
while (it.hasNext()) {
Object obj = it.next();
if (obj instanceof Station ) {
Station s1 = (Station ) obj;
s1.stationDo();
}
if (obj instanceof Cell ) {
Cell c1 = (Cell ) obj;
c1.cellDo();
}
}
在這里我們可以通過instanceof 判斷結(jié)果,執(zhí)行不同類中的相應(yīng)動(dòng)作方法(stationDo()、cellDo())。
一般在使用無泛型的集合(List、set等)時(shí),比較多的使用 instanceof ,由于集合能夠存各種對(duì)象,所以在讀取時(shí)一般要進(jìn)行相應(yīng)的判斷。