天天看點

java instanceof和isInstance的關系 精析

1.instanceof

  用途:判斷這個object對象是不是這種Class類型。

  文法:

boolean result = object instanceof Class;
           

  用法:

  判斷object對象是否是class類(本身類);

  判斷object對象是否是本身類所繼承的類(父類);

  判斷object對象是否是本身類所實作的接口;

  所有的對象都是Object類;

  凡是null相關的都是false。

  示例: 

  共用代碼

/**
 * 機器
 * @explain
 * @author Marydon
 * @creationTime 2018年10月17日上午9:32:01
 * @version 1.0
 * @since
 * @email [email protected]
 */
class Machine {
	
}

/**
 * 電腦
 * @explain
 * @author Marydon
 * @creationTime 2018年10月17日上午9:32:14
 * @version 1.0
 * @since
 * @email [email protected]
 */
class Computer extends Machine {
	
}

/**
 * usb接口
 * @explain
 * @author Marydon
 * @creationTime 2018年10月17日上午9:32:27
 * @version 1.0
 * @since
 * @email [email protected]
 */
interface Usb {
	
}

/**
 * 滑鼠
 * @explain
 * @author Marydon
 * @creationTime 2018年10月17日上午9:32:39
 * @version 1.0
 * @since
 * @email [email protected]
 */
class Mouse implements Usb{
	
}

/**
 * 測試instanceof與isInstance()
 * @explain
 * @author Marydon
 * @creationTime 2018年10月17日上午9:25:15
 * @version 1.0
 * @since
 * @email marydon20170[email protected]
 */
public class TestInstance {
    // main方法    
}
           

  測試

public static void main(String[] args) {
    Computer computer = new Computer();
    Mouse mouse = new Mouse();
    
    System.out.println("==============instanceof階段測試1==============");
    // 判斷object對象是否是class類(本身類)
    System.out.println(computer instanceof Computer);
    // 判斷object對象是否是本身類所繼承的類(父類)
    System.out.println(computer instanceof Machine);
    // System.out.println(computer instanceof Mouse);// 編譯報錯:Incompatible conditional operand types Computer and Mouse
    // 判斷object對象是否是本身類所實作的接口
    System.out.println(mouse instanceof Usb);
    // System.out.println(mouse instanceof Machine);// 編譯報錯
    
    System.out.println("==============instanceof階段測試2==============");
    // 所有的對象都是Object類
    System.out.println(computer instanceof Object);
    System.out.println(mouse instanceof Object);
    
    System.out.println("==============instanceof階段測試3==============");
    // 凡是null相關的都是false
    System.out.println(null instanceof Object);// false
    System.out.println(null instanceof Computer);// false
}
           

2.isInstance

  用途:判斷這個object對象能不能被轉化為這個Class類。

  文法:

boolean result = Class.class.isInstance(object);
           

  用法:

  判斷object對象能否轉化成class類(本身類);

  判斷object對象能否轉化成本身類所繼承的類(父類);

  判斷object對象能否轉化成本身類所實作的接口;

  所有的對象都轉換成Object類;

  凡是null相關的都是false。

  示例: 

public static void main(String[] args) {
    Computer computer = new Computer();
    Mouse mouse = new Mouse();
    
    System.out.println("==============isInstance階段測試1==============");
    // 判斷object對象能否轉化成class類(本身類)
    System.out.println(Computer.class.isInstance(computer));
    // 判斷object對象能否轉化成本身類所繼承的類(父類)
    System.out.println(Machine.class.isInstance(computer));
    // 明顯不能這樣比較,但編譯通過
    System.out.println(Mouse.class.isInstance(computer));// false
    
    // 判斷object對象能否轉化成本身類所實作的接口
    System.out.println(Usb.class.isInstance(mouse));
    
    // 明顯不能這樣比較,但編譯通過
    System.out.println(Machine.class.isInstance(mouse));// false
    
    System.out.println("==============isInstance階段測試2==============");
    // 所有的對象都轉換成Object類
    System.out.println(Object.class.isInstance(computer));
    System.out.println(Object.class.isInstance(mouse));
    
    System.out.println("==============isInstance階段測試3==============");
    // 凡是null相關的都是false
    System.out.println(Object.class.isInstance(null));// false
    System.out.println(Computer.class.isInstance(null));// false
}  
           

3.差別與聯系

  差別:

  instanceof是一個操作符,isInstance是Class類的一個方法;

  instanceof表示對象A是不是B類型,isInstance表示對象A是否能強轉成B類型;

  instanceof 編譯器在編譯時需要知道類的具體類型,isInstance 編譯器在運作時才進行類型檢查,故可用于反射,泛型中。

  聯系:

  isInstance()是 Java 語言 instanceof 運算符的動态等效方法。

  示例:

public static void main(String[] args) {
    System.out.println("==============instanceof和isInstance==============");
    // 差別
    // System.out.println(1 instanceof String);// 編譯不通過
    System.out.println(String.class.isInstance(1));// false
    
    // 聯系
    System.out.println("Marydon" instanceof String); 
    System.out.println(String.class.isInstance("Marydon"));
}
           

  

寫在最後

  哪位大佬如若發現文章存在纰漏之處或需要補充更多内容,歡迎留言!!!

 相關推薦:

  • 個人首頁

轉載于:https://www.cnblogs.com/Marydon20170307/p/9803218.html