一. instanceOf關(guān)鍵字
簡(jiǎn)介
在上面學(xué)習(xí)類型轉(zhuǎn)換時(shí),壹哥跟大家講過(guò),在向下轉(zhuǎn)型時(shí),如果兩個(gè)類型之間沒(méi)有直接或間接的繼承關(guān)系,此時(shí)進(jìn)行強(qiáng)制類型轉(zhuǎn)換就會(huì)出現(xiàn)異常。出現(xiàn)異??倸w是不好的,那么我們有沒(méi)有辦法提前避免呢?必須有!其中的一個(gè)解決辦法就是利用instanceOf關(guān)鍵字來(lái)提前判斷。
我們?cè)谙蛳罗D(zhuǎn)型之前,最好先對(duì)要轉(zhuǎn)換的對(duì)象進(jìn)行判斷,以免發(fā)生類型轉(zhuǎn)換異常。
instanceof是Java里的一個(gè)二元操作符,類似于 ==、>、<等操作符。在進(jìn)行向下轉(zhuǎn)型時(shí),我們可以使用instanceOf用于類型檢查,判斷某個(gè)對(duì)象是否屬于指定的類型,如果屬于則返回true,否則返回false。
語(yǔ)法
instanceOf的作用是測(cè)試它左邊的對(duì)象是否是它右邊類的實(shí)例,并返回 boolean類型的數(shù)據(jù)。instanceOf基本語(yǔ)法如下:
對(duì)象名 instanceof 類型
instanceOf也經(jīng)常和三目(條件)運(yùn)算符一起使用,格式為 a對(duì)象 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類型,才會(huì)進(jìn)行方法調(diào)用,否則不會(huì)執(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)常和三目(條件)運(yùn)算符一起使用
Object obj2 = "hello 壹壹哥";
String result=obj2 instanceof String ? "yes":"no";
System.out.println(result);
}
}
注意:從Java 14開始,判斷instanceOf后,可以直接轉(zhuǎn)型為指定類型的變量,不用再次強(qiáng)制轉(zhuǎn)型