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