Java千問:instanceof運算符用法詳解

Java語言當中提供了一個叫作instanceof的運算符。不少教科書上對這個運算符的介紹並不詳細,只是簡單的說這個運算符是用來判斷某個對象是否是屬於某種類型。咱們如今就用一篇短文介紹一下instanceof的運算符的做用和注意事項。請看下面的代碼片斷
Java千問:instanceof運算符用法詳解
代碼中定義了一個接口和兩個類。你們記清楚它們之間的關係:Person類實現了Moveable接口,Student類繼承了Person類。緊接着咱們來看下面的代碼
Java千問:instanceof運算符用法詳解
在代碼中,咱們建立了一些對象,而且使用instanceof運算符判斷某個對象是否屬於某種類型。請問程序的輸出結果會是什麼呢?公佈一下答案:所有輸出true!有讀者可能不解爲何會是這樣的輸出結果?好比標號爲⑥的那行代碼,明明p2是Person類的對象,而Person類是Student的父類,爲何虛擬機會認爲p2是Student類的對象呢?html

爲了弄清楚這個問題,咱們必須搞清楚instanceof運算符的判斷依據。instanceof運算符在判斷的過程當中,看的是引用實際指向的對象 (而不是看引用自身的類型)是否是能夠被認定爲屬於某種類型。若是能夠被認定爲屬於這種類型,那麼運算結果爲true;反之,若是假設不成立或未必成立,則運算結果爲false。好比說,p2雖然是Person類型的,但它實際指向了一個Student類型的對象,因此p2確定屬於Student類型,所以輸出結果爲true。編程

其實咱們能夠用一種比較簡單的方法來理解輸出結果,那就是用一個自問句式來判斷:一個a是一個A嗎?好比說,p2實際指向的是一個Student類型的對象,而代碼中出現了」 p2 instanceof Person」(見標號爲④的代碼),咱們就能夠自問一下:一個Student(學生,既p2指向的那個對象)是一個Person(人)嗎?一個學生固然是一我的,因此這句自問的答案確定是true。反過來,若是代碼被寫成」 p1 instanceof Student」, p1實際指向的是一個Person類的對象,咱們再來分析一下運算結果,也能夠採用這種自問的形式:一個Person(人)是一個Student(學生)嗎?一我的未必是一個學生,因此這種假設並不必定成立,所以判斷的結果爲false。ide

我想,講到這裏,讀者已經知道instanceof運算符的判斷依據了吧?那麼,在使用這個運算符的過程當中,要注意哪些事項呢?概括一下能夠總結出兩點:
一、instanceof左邊必須是引用數據類型,而它右邊必定是類或者接口的名稱,不能是基礎數據類型的名稱。好比」1 instanceof int」或者」 1 instanceof Integer」這樣的寫法都是錯誤的。
二、若是instanceof左邊的引用指向的是一個空對象(null),那麼不管instanceof右邊不管是什麼類型,運算結果確定是false。學習

如想系統學習Java編程,能夠點擊https://edu.51cto.com/lecturer/2256836.html觀看我在本站的視頻課程,有問題也能夠加入個人QQ羣291839907一塊兒討論!視頻

相關文章
相關標籤/搜索