一. instanceOf關(guān)鍵字
簡介
在上面學(xué)習(xí)類型轉(zhuǎn)換時,壹哥跟大家講過,在向下轉(zhuǎn)型時,如果兩個類型之間沒有直接或間接的繼承關(guān)系,此時進(jìn)行強(qiáng)制類型轉(zhuǎn)換就會出現(xiàn)異常。出現(xiàn)異常總歸是不好的,那么我們有沒有辦法提前避免呢?必須有!其中的一個解決辦法就是利用instanceOf關(guān)鍵字來提前判斷。
我們在向下轉(zhuǎn)型之前,最好先對要轉(zhuǎn)換的對象進(jìn)行判斷,以免發(fā)生類型轉(zhuǎn)換異常。
instanceof是Java里的一個二元操作符,類似于 ==、>、<等操作符。在進(jìn)行向下轉(zhuǎn)型時,我們可以使用instanceOf用于類型檢查,判斷某個對象是否屬于指定的類型,如果屬于則返回true,否則返回false。
語法
instanceOf的作用是測試它左邊的對象是否是它右邊類的實例,并返回 boolean類型的數(shù)據(jù)。instanceOf基本語法如下:
對象名 instanceof 類型
instanceOf也經(jīng)常和三目(條件)運算符一起使用,格式為 a對象 instanceof B類型 ? 表達(dá)式1 : 表達(dá)式2
另外從Java 14開始,instanceOf判斷后,可以直接轉(zhuǎn)型為指定類型的變量,不用再次強(qiáng)制轉(zhuǎn)型!
3. 案例
我們還是在上面的代碼基礎(chǔ)之上進(jìn)行修改,instanceOf關(guān)鍵字使用案例如下:
public class AnimalTest {
public static void main(String[] args) {
Animal animal= new Cat();
//判斷animal是否是Cat類型
if(animal instanceof Cat) {
animal.speak();
}
Dog dog=new Dog();
//如果dog是Cat類型,才會進(jìn)行方法調(diào)用,否則不會執(zhí)行。
if(dog instanceof Cat) {
//強(qiáng)制類型轉(zhuǎn)換
Cat cat = (Cat)dog;
dog.speak();
}
//注意:從Java 14開始,判斷instanceOf后,可以直接轉(zhuǎn)型為指定類型的變量,不用再次強(qiáng)制轉(zhuǎn)型。
Object obj = "java14新特性";
if (obj instanceof String s) {
System.out.println("字符串變大寫=" + s.toUpperCase());
}
if (dog instanceof Cat c) {
c.speak();
}
//instanceOf也經(jīng)常和三目(條件)運算符一起使用
Object obj2 = "hello 壹壹哥";
String result=obj2 instanceof String ? "yes":"no";
System.out.println(result);
}
}
注意:從Java 14開始,判斷instanceOf后,可以直接轉(zhuǎn)型為指定類型的變量,不用再次強(qiáng)制轉(zhuǎn)型