高級JAVA碼農必須搞清楚它們的區別:instanceof、isInstance、isAssignableFrom

2021-03-02 Java技術棧

instanceof、isInstance、isAssignableFrom這幾個有沒有接觸過,或者接觸過部分?

定義

a instanceof B 


a是B的實例,B是類或者接口、父類或父接口,即B c = a成立。

B.class.isInstance(a)


這個叫動態等價,效果和上面等價,一般用於檢查泛型,如jdk中CheckedMap裡面用到這個檢查Map裡面的key、value類型是否和約定的一樣。

A.class.isAssignableFrom(B)


兩個class的類型關係判斷,判斷B是不是A的子類或子接口

演示

先看看下面的例子就會明白它們各自的用途和含義。

User:用戶基類

PrivateUser:私人用戶子類,繼承User類

PrivateUser priUser = new PrivateUser();

System.out.println(priUser instanceof User);// true

System.out.println(User.class.isInstance(priUser));// true

System.out.println(User.class.isAssignableFrom(PrivateUser.class));// true

System.out.println(PrivateUser.class.isAssignableFrom(User.class));// false

相關焦點

  • for example 和 for instance有什麼區別?
    for example和for instance基本是一個意思,區別非常非常小,可以互換使用。有人認為for instance更加正式,因為for example口語中見得太多了,而for instance沒怎麼見過,instance這個詞也不認識,對不熟悉的事物存有敬畏之心是正常的。
  • For example, for instance和such as
    如果僅僅停留於共性,而不體會它們之間的差異,那不是學力學的筆者的split hairs風格(語言的任何feature能保留下來,一定有它的歷史依據和邏輯原因)。但有時這樣做會引起歧義,如:例句12:Some of the European languages come from Latin, for example, French, Italian, and Spanish.
  • Java面試題:isAssignableFrom與instanceof的區別
    Java面試Java面試題:isAssignableFrom與instanceof的區別?下面就回答面試:關鍵字instanceof先說instanceof,這個用的比較多,用來判斷一個實例是否是某個接口或者類的實例,判斷的是運行時候的實例。和這個instanceof關鍵字用法相同的就是Class對象的isInstance方法。
  • For example、for instance、such as、like的區別在於這個原因
    英文中表示舉例的方式有:for instance,for example,such as以及like.那麼它們之間的區別以及原因到底在哪呢?For instance表示「以……為例」,與for example差不多。而差別在於:for instance舉的例子更加具體,通常為一件事情的經過。Such as與like均表示「比如」(可以互換)。顯而易見,「比如」後面自然是可以接很多個例子的。舉個例子:我喜歡花,比如茉莉花、金銀花、水仙花……等。
  • 面試官:說說 typeof 與 instanceof 區別?
    = 'undefined'){    //變量存在}二、instanceofinstanceof 運算符用於檢測構造函數的 prototype 屬性是否出現在某個實例對象的原型鏈上使用如下:object
  • JAVA中的一個特殊運算符instanceof
    今天要聊的就是JAVA中的一個特殊的運算符instanceof。instanceof運算符是用來判斷一個對象是否是指定類型的實例的。如果是指定類型的對象則返回true,否則返回false。下面說說instanceof運算符的幾個場景的情況吧。
  • 類型內置函數-type() isinstance()
    2. isinstance()函數isinstance()函數用於判斷實例對象與類對象的關係,isinstance()函數用法是:isinstance(object, classinfo)In [13]: isinstance(8.9,float)Out[13]: TrueIn [14]: isinstance('wzc',str)Out[14]: TrueIn [15]: isinstance((1,2,3),tuple)Out[15]: True2.2
  • 類型檢查:typeof 和 instanceof 運算符區別?
    JS 函數可以做更多的事情:它們甚至可以構造對象!要使函數構造對象,只需在常規函數調用之前使用new關鍵字:function Greeter(who) {  this.message = `Hello, ${who}!
  • JavaScript學習- js中的typeof/instanceof
    instanceof 和 typeof 非常的類似。instanceof 運算符用來檢測 constructor.prototype 是否存在於參數 object 的原型鏈上。與 typeof 方法不同的是,instanceof 方法要求開發者明確地確認對象為某特定類型。
  • 面向對象中instanceof關鍵字的用法
    今天和大家學習一下關於instanceof關鍵字的一下用法。開始學習前,我們思考一個問題。如何才能知道一個父類引用的對象,本來是什么子類呢?instanceof關鍵字格式:對象 instanceof 類名稱這將會得到一個boolean值結果,也就是判斷前面的對象能不能當作後面類型的實例,聽起來是不是有點繞,我們下面來看代碼:新建一個Dog類:
  • 四六級考研加油站llfor example、such as 和for instance有什麼區別?
    【延伸閱讀】四六級考研加油站lla、an和the用法四六級考研加油站llas follows 的用法及句法功能舉例說明是四六級和考研中經常涉及的情況,但是,考生們的表現可是不容樂觀,用錯的例子比比皆是,因此,為了有助於大家辨別for example、such as和for instance
  • 面試必備:每天都看見的instanceof,卻不知道怎麼描述
    01.obj 必須為引用類型,不能是基本類型int i = 0;Integer j = 0;System.out.println(i instanceof Integer);System.out.println
  • Java的單例模式
    if(instance == null){  //第二次判空操作                    instance = new Singleton();               }           }       }        return instance;   }}
  • 【143期】Java 類是如何被加載的?
    二:Java 類是如何被加載的2.1:何時加載類我們首先要清楚的是,Java類何時會被加載?《深入理解Java虛擬機》給出的答案是:其實要我說,最通俗易懂的答案就是:當運行過程中需要這個類的時候。那麼我們不妨就從如何加載類開始說起。
  • 10個經典的 Java main 方法面試題
    package com.instanceofjava;public class MainMethod{public static void main(String args[]){}}3.我們能不能改變main()方法的返回類型?不能,main()方法的返回類型只能是空。任何其它類型都是不能接受的。
  • Java單例模式深入詳解
    2、單例類必須自己自己創建自己的唯一實例。3、單例類必須給所有其他對象提供這一實例。單例模式確保某個類只有一個實例,而且自行實例化並向整個系統提供這個實例。在計算機系統中,線程池、緩存、日誌對象、對話框、印表機、顯卡的驅動程序對象常被設計成單例。這些應用都或多或少具有資源管理器的功能。
  • Java基礎-instanceof用法揭秘
    註:instanceof操作符的關係表達式操作數的類型必須是一個引用類型或者null類型,否則拋出編譯錯誤It is a compile-time error if the ReferenceType mentioned after the instanceof operator does not denote a reference type that
  • Java程式設計師必備:序列化全方位解析
    磁碟這些硬體可不認識Java對象,它們只認識二進位這些機器語言,所以我們就要把這些對象轉化為字節數組,這個過程就是序列化啦~打個比喻,作為大城市漂泊的碼農,搬家是常態。當我們搬書桌時,桌子太大了就通不過比較小的門,因此我們需要把它拆開再搬過去,這個拆桌子的過程就是序列化。而我們把書桌復原回來(安裝)的過程就是反序列化啦。
  • 全方位解析Java序列化
    磁碟這些硬體可不認識 Java 對象,它們只認識二進位這些機器語言,所以我們就要把這些對象轉化為字節數組,這個過程就是序列化啦~打個比喻,作為大城市漂泊的碼農,搬家是常態。當我們搬書桌時,桌子太大了就通不過比較小的門,因此我們需要把它拆開再搬過去,這個拆桌子的過程就是序列化。而我們把書桌復原回來(安裝)的過程就是反序列化啦。
  • 「軟帝學院」:2020最新的Java學習基本概念總結
    數據類型及類Java 是完全面向對象的語言,所有函數和變量部必須是類的一部分。除了基本數據類型之外,其餘的都作為類對象,包括數組。對象將數據和方法結合起來,把它們封裝在類中,這樣每個對象都可實現自己的特點和行為。而 C++ 允許將函數和變量定義為全局的。