instanceof

instanceof

instanceof是Java、php的一個二元操作符(運算符),和==,>,

基本信息

用法

boolean result = object instanceof class

參數

Result:布爾類型。

Object:必選項。任意對象表達式。

class:必選項。任意已定義的對象類。

說明

如果 object 是 class 的一個實例,則 instanceof 運算符返回 true。如果 object 不是指定類的一個實例,或者 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=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

示例

舉個例子:

String s = "I AM an Object!";

boolean isobject = s instanceof Object;

我們聲明了一個String對象引用,指向一個String對象,然後用instanceof來測試它所指向的對象是否是Object類的一個實例,顯然,這是真的,所以返回true,也就是isobject的值為true。

instanceof有一些用處。比如我們寫了一個處理賬單的系統,其中有這樣三個類:

public class Bill {//省略細節}

public class PhoneBill extends Bill {//省略細節}

public class GasBill extends Bill {//省略細節}

在處理程式里有一個方法,接受一個Bill類型的對象,計算金額。假設兩種賬單計算方法不同,而傳入的Bill對象可能是兩種中的任何一種,所以要用instanceof來判斷:

public double calculate(Bill bill) {

if (bill instanceof PhoneBill) {

//計算電話賬單

}

if (bill instanceof GasBill) {

//計算燃氣賬單

}

...

}

這樣就可以用一個方法處理兩種子類。

然而,這種做法通常被認為是沒有好好利用面向對象中的多態性。其實上面的功能要求用方法重載完全可以實現,這是面向對象編程應有的做法,避免回到結構化編程模式。只要提供兩個名字和返回值都相同,接受參數類型不同的方法就可以了:

public double calculate(PhoneBill bill) {

//計算電話賬單

}

public double calculate(GasBill bill) {

//計算燃氣賬單

}

所以,使用instanceof在絕大多數情況下並不是推薦的做法,應當好好利用多態。

instanceof 一般情況下 用在對象類型的強制轉換,

例如:

繼承關係 class Manager extends Employee

----------------------------------------------------------

public void doSomething(Employee e) {

if ( e instanceof Manager){

Manager m = (Manager) e ;

}

}

網路釋義

1.運算符返回一個 Boolean 值,表明某個對象是否為特定類的一個實例。...instanceof 運算符...返回一個 Boolean 值,表明某個給定的數是否是有窮的。

2. 和回調概念 instanceof和回調概念...instanceof和回調概念...

3. 動態的

4. 操作符

-----------------------------------------------------------

相關詞條

相關搜尋

熱門詞條

聯絡我們