,"/>
您好,登錄后才能下訂單哦!
簡(jiǎn)介
instanceof是Java、php的一個(gè)二元操作符(運(yùn)算符),和==,>,<是同一類東西。由于它是由字母組成的,所以也是Java的保留關(guān)鍵字。它的作用是判斷其左邊對(duì)象是否為其右邊類的實(shí)例,返回boolean類型的數(shù)據(jù)。可以用來(lái)判斷繼承中的子類的實(shí)例是否為父類的實(shí)現(xiàn)。相當(dāng)于c#中的is操作符。java中的instanceof是通過(guò)返回一個(gè)布爾值來(lái)指出,這個(gè)對(duì)象是否是這個(gè)特定類或者是它的子類的一個(gè)實(shí)例。
我們現(xiàn)在就用一篇短文介紹一下instanceof的運(yùn)算符的作用和注意事項(xiàng)。請(qǐng)看下面的代碼片段
代碼中定義了一個(gè)接口和兩個(gè)類。大家記清楚它們之間的關(guān)系:Person類實(shí)現(xiàn)了Moveable接口,Student類繼承了Person類。緊接著我們來(lái)看下面的代碼
在代碼中,我們創(chuàng)建了一些對(duì)象,并且使用instanceof運(yùn)算符判斷某個(gè)對(duì)象是否屬于某種類型。請(qǐng)問(wèn)程序的輸出結(jié)果會(huì)是什么呢?公布一下答案:全部輸出true!有讀者可能不解為什么會(huì)是這樣的輸出結(jié)果?比如標(biāo)號(hào)為⑥的那行代碼,明明p2是Person類的對(duì)象,而Person類是Student的父類,為什么虛擬機(jī)會(huì)認(rèn)為p2是Student類的對(duì)象呢?
為了弄清楚這個(gè)問(wèn)題,我們必須搞清楚instanceof運(yùn)算符的判斷依據(jù)。instanceof運(yùn)算符在判斷的過(guò)程中,看的是引用實(shí)際指向的對(duì)象 (而不是看引用自身的類型)是不是可以被認(rèn)定為屬于某種類型。如果可以被認(rèn)定為屬于這種類型,那么運(yùn)算結(jié)果為true;反之,如果假設(shè)不成立或未必成立,則運(yùn)算結(jié)果為false。比如說(shuō),p2雖然是Person類型的,但它實(shí)際指向了一個(gè)Student類型的對(duì)象,所以p2肯定屬于Student類型,因此輸出結(jié)果為true。
其實(shí)我們可以用一種比較簡(jiǎn)單的方法來(lái)理解輸出結(jié)果,那就是用一個(gè)自問(wèn)句式來(lái)判斷:一個(gè)a是一個(gè)A嗎?比如說(shuō),p2實(shí)際指向的是一個(gè)Student類型的對(duì)象,而代碼中出現(xiàn)了” p2 instanceof Person”(見(jiàn)標(biāo)號(hào)為④的代碼),我們就可以自問(wèn)一下:一個(gè)Student(學(xué)生,既p2指向的那個(gè)對(duì)象)是一個(gè)Person(人)嗎?一個(gè)學(xué)生當(dāng)然是一個(gè)人,所以這句自問(wèn)的答案肯定是true。反過(guò)來(lái),如果代碼被寫成” p1 instanceof Student”, p1實(shí)際指向的是一個(gè)Person類的對(duì)象,我們?cè)賮?lái)分析一下運(yùn)算結(jié)果,也可以采用這種自問(wèn)的形式:一個(gè)Person(人)是一個(gè)Student(學(xué)生)嗎?一個(gè)人未必是一個(gè)學(xué)生,所以這種假設(shè)并不一定成立,因此判斷的結(jié)果為false。
我想,講到這里,讀者已經(jīng)知道instanceof運(yùn)算符的判斷依據(jù)了吧?那么,在使用這個(gè)運(yùn)算符的過(guò)程中,要注意哪些事項(xiàng)呢?歸納一下可以總結(jié)出兩點(diǎn):
1、instanceof左邊必須是引用數(shù)據(jù)類型,而它右邊一定是類或者接口的名稱,不能是基礎(chǔ)數(shù)據(jù)類型的名稱。比如”1 instanceof int”或者” 1 instanceof Integer”這樣的寫法都是錯(cuò)誤的。
2、如果instanceof左邊的引用指向的是一個(gè)空對(duì)象(null),那么無(wú)論instanceof右邊無(wú)論是什么類型,運(yùn)算結(jié)果肯定是false。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。