Java:instanceof 運算子用法說明

Java 的 instanceof 運算子是一個二元運算子,
二元運作子接受兩個參數,通常是用來比較兩個參數間的關係,
常見的二元運算子有 ==, > , < 等等。

圖片來源:http://www.zazzle.com/java+code+gifts

那麼 instanceof 這個運算子是用來比較什麼關係呢?
他的用法是這樣的:objectA instanceof ClassName,
這是要測試某一物件 objectA 是否為某類別 (class)或其子類別 (subclass) 實例 (instance),
或是 objectA 是不是某介面 (interface) 的實作。

當 objectA 屬於該 class (或其衍生類別) 的 instance 就會回傳 true;否則傳回 false。
所以 instanceof 可以被用在繼承的關係中,
需特別注意的是,比較時物件與類別間要有繼承關係,否則會有compile error如:
"myInstanceof.java": Error #: 365 : cannot compare java.lang.Long with java.lang.String

另外要說明的是,我們知道在 Java 中所有的 class 都是繼承 Object 這個 class,
所以理論上任意的 objectA instanceof Object 都應該回傳 true,
這是錯的!當 objectA 指向 null 時這個條件判斷會回傳 false 喔!千萬注意!
另外 Java 中還有基本型別如 int, byte, boolean 等,
這些基本型別沒辦法使用 instanceof 這個運算子,
必須是 Integer, Byte, Boolean 這些物件化的才可以使用喔!

除了任意物件都會繼承 Object 外,任何陣列也都繼承Object,
所以所有的物件陣列都將同時繼承 Object 和 Object[]。
基本型別的陣列同樣會繼承Object,
但因為基本型別不是物件,所以基本型別陣列不會繼承 Object[]。

關鍵字:java instanceof, 泛型, boolean, exception, operator, 使用, 用法, string, 效率, null, api, typeof
參考資料:

這個網誌中的熱門文章

繳納2018/107年度牌照稅信用卡回饋/分期整理!

證件遺失補辦身分證/健保卡/駕照/行照/信用卡總整理

2018最新博客來100,50,25折價券序號e-coupon分享

國泰Koko combo icash網購/超商/icash/繳費5%!

所得稅要繳多少?最新最完整的所得稅計算教學!再教你看懂稅率級距表/免稅額/扣除額!

Line Pay最新信用卡活動+店家30%+回饋整理!

街口支付最新信用卡+店家街口幣回饋整理!

週六全家台新滿百最高送20可再搭三大Pay活動!

TOEIC多益成績分數查詢、計算標準與換算對照表

信用卡額度太高想調低?千萬別這麼做!