在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Java/ Java instanceof運(yùn)算符
Java for循環(huán)
Java接口
Java是什么?
Java命名約定
java中方法重載和方法重寫的區(qū)別
Java運(yùn)算符
Java抽象類
Java快速入門
Java實(shí)例初始化程序塊
Java靜態(tài)綁定和動(dòng)態(tài)綁定
Java do-while循環(huán)
Java對(duì)象克隆
Java Object類
Java聚合
Java繼承
Java this關(guān)鍵字
Java虛擬機(jī)內(nèi)部體系結(jié)構(gòu)
Java構(gòu)造器(構(gòu)造方法)
Eclipse安裝和配置
Java多態(tài)
Java方法重載
Java while循環(huán)
Java教程
Java按值調(diào)用和引用調(diào)用
Java strictfp關(guān)鍵字
Java封裝
Java語言特點(diǎn)
Java數(shù)組
Java instanceof運(yùn)算符
Java包裝類
Java命令行參數(shù)
Java包
Java面向?qū)ο螅∣OP)概念
簡(jiǎn)單Java程序
Java基礎(chǔ)實(shí)例程序
Java對(duì)象和類
Java continue語句
Java抽象類和接口的區(qū)別
C++ VS Java比較
Java if/else語句
Java switch語句
Java歷史
Java變量和數(shù)據(jù)類型
安裝Java環(huán)境(Linux)
Java JDK安裝和配置
Hello Java程序的內(nèi)部細(xì)節(jié)
Java break語句
Java方法重寫
Java Unicode編碼系統(tǒng)
怎么樣開始學(xué)習(xí)Java編程?
對(duì)象和類之間的區(qū)別
Java訪問修飾符
Java super關(guān)鍵字
Java注釋
JDK,JRE和JVM之間的區(qū)別
Java final關(guān)鍵字
Java static關(guān)鍵字

Java instanceof運(yùn)算符

java instanceof運(yùn)算符用于測(cè)試指定對(duì)象是否是指定類型(類或子類或接口)的實(shí)例。

java中的instanceof也稱為類型比較運(yùn)算符,因?yàn)樗鼘㈩愋团c實(shí)例進(jìn)行比較。 它返回truefalse。 如果對(duì)任何具有null值的變量應(yīng)用instanceof運(yùn)算符,則返回false。

java instanceof的簡(jiǎn)單示例

下面來看看實(shí)例運(yùn)算符的簡(jiǎn)單示例,它測(cè)試當(dāng)前類。

class Simple1 {
    public static void main(String args[]) {
        Simple1 s = new Simple1();
        System.out.println(s instanceof Simple1);// true
    }
}

執(zhí)行上面試代碼,得到以下結(jié)果 -

true

子類類型的對(duì)象也是父類的類型。 例如,如果Dog擴(kuò)展了Animal,那么Dog的對(duì)象可以通過DogAnimal類來引用。

java instanceof運(yùn)算符的另一個(gè)例子

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
    }
}

執(zhí)行上面代碼,得到以下結(jié)果 -

true

instanceof測(cè)試null值的變量示例

如果我們對(duì)具有null值的變量應(yīng)用instanceof運(yùn)算符,則返回false。來看看下面給出的例子,將instanceof運(yùn)算符應(yīng)用于具有null值的變量。

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

執(zhí)行上面代碼,得到以下結(jié)果 -

false

使用java instanceof運(yùn)算符的向下轉(zhuǎn)換

當(dāng)子類型引用父類的對(duì)象時(shí),它被稱為向下轉(zhuǎn)換(downcasting)。 如果直接執(zhí)行它,編譯器會(huì)出現(xiàn)編譯錯(cuò)誤。 如果通過類型轉(zhuǎn)換來執(zhí)行,在運(yùn)行時(shí)會(huì)拋出:ClassCastException 。 但是如果使用instanceof運(yùn)算符,可以進(jìn)行向下轉(zhuǎn)換。

Dog d=new Animal();//Compilation error

如果通過類型轉(zhuǎn)換執(zhí)行向下轉(zhuǎn)換,則在運(yùn)行時(shí)拋出:ClassCastException

Dog d=(Dog)new Animal();  
//Compiles successfully but ClassCastException is thrown at runtime

使用instanceof進(jìn)行向下轉(zhuǎn)換

現(xiàn)在看看下面這個(gè)例子,通過instanceof運(yùn)算符進(jìn)行向下轉(zhuǎn)換。

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);
    }

}

執(zhí)行上面代碼,得到以下結(jié)果 -

ok downcasting performed

向下轉(zhuǎn)換不使用instanceof

也可以在不使用instanceof運(yùn)算符的情況下執(zhí)行下轉(zhuǎn)換,如以下示例代碼所示:

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);
    }
}

執(zhí)行上面代碼,得到以下結(jié)果 -

ok downcasting performed

仔細(xì)看看,被引用的實(shí)際對(duì)象是Dog類的對(duì)象。 所以如果向下轉(zhuǎn)換它,它是沒有問題的。 但是,如果也可以這樣寫:

Animal a=new Animal();  
Dog.method(a);  
//Now ClassCastException but not in case of instanceof operator

理解在java中使用instanceof的實(shí)例

這是一個(gè)instanceof的終極示例,通過下面的例子中的代碼看看instanceof關(guān)鍵字的真正用法。

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);
    }
}

執(zhí)行上面代碼,得到以下結(jié)果 -

b method